1~6链接
http://liyunpeng.iteye.com/blog/2076529
七、枚举和结构体
Swift中,使用enum关键词来定义枚举类
代码例子如下
enum Rank: Int {
case Ace = 1
case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
case Jack, Queen, King
func simpleDescription() -> String {
switch self {
case .Ace:
return "ace"
case .Jack:
return "jack"
case .Queen:
return "queen"
case .King:
return "king"
default:
return String(self.toRaw())
}
}
}
let ace = Rank.Ace
let aceRawValue = ace.toRaw()
if let convertedRank = Rank.fromRaw(11) {
let threeDescription = convertedRank.simpleDescription()
}
使用toRaw和fromRaw方法来转换在原始值和枚举值,上面的例子在第一句中设置了枚举的原始值,后面的值会依次按照原始值赋值
我们也可以不给他设置原始值,直接使用枚举,代码如下
enum Suit {
case Spades, Hearts, Diamonds, Clubs
func simpleDescription() -> String {
switch self {
case .Spades:
return "spades"
case .Hearts:
return "hearts"
case .Diamonds:
return "diamonds"
case .Clubs:
return "clubs"
}
}
}
let hearts = Suit.Hearts
let heartsDescription = hearts.simpleDescription()
在以上的这段代码里面,我们可以看到两种引用枚举值的方式,也就是在枚举内部的方法里,可以直接使用.Hearts来引用Hearts值,默认可以省去self,而在外面则需要写全部的Suit.Hearts
使用struck关键字创建结构体,结构体和类大部分是相同的,最大不同的地方是结构体在传递的时候完全是新的副本,而类则是传递的引用
更多的不同,可以参看如下博客,写的比较详细
http://blog.csdn.net/supergerm/article/details/29969785
一个枚举可以在不同的实例有不同的值,例如代码如下
enum ServerResponse {
case Result(String, String)
case Error(String)
}
let success = ServerResponse.Result("6:00 am", "8:09 pm")
let failure = ServerResponse.Error("Out of cheese.")
switch success {
case let .Result(sunrise, sunset):
let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."
case let .Error(error):
let serverResponse = "Failure... \(error)"
}
八、协议与扩展
定义协议,使用protocol关键字,协议类似于Java中的接口interface定义,类、枚举和结构体可以采用协议,代码如下
protocol ExampleProtocol {
var simpleDescription: String { get }
mutating func adjust()
}
class SimpleClass: ExampleProtocol {
var simpleDescription: String = "A very simple class."
var anotherProperty: Int = 69105
func adjust() {
simpleDescription += " Now 100% adjusted."
}
}
var a = SimpleClass()
a.adjust()
let aDescription = a.simpleDescription
struct SimpleStructure: ExampleProtocol {
var simpleDescription: String = "A simple structure"
mutating func adjust() {
simpleDescription += " (adjusted)"
}
}
var b = SimpleStructure()
b.adjust()
let bDescription = b.simpleDescription
其中涉及到关键字 mutating ,这个关键字在官方文档里面解释,是当结构体或者枚举类型中的方法定义,修改self的值的时候,需要在方法定义前面加这个关键字
可以使用协议的名字来定义类型,比如如下
let protocolValue: ExampleProtocol = a
protocolValue.simpleDescription
面向对象的基本特征,这个就不用太多说了!
九、泛型
Swift中使用角括号<>来定义泛型方法或者类型,例如代码如下
func repeat<ItemType>(item: ItemType, times: Int) -> ItemType[] {
var result = ItemType[]()
for i in 0..times {
result += item
}
return result
}
repeat("knock", 4)
以上的代码中ItemType代表泛型的类型,而参数中和返回值的ItemType,则代表传进来的泛型类型,原本是未知的,而传进来是什么则就是什么类型,类似于<T>
我们可以定义泛型给函数方法、类、枚举和结构体
// Reimplement the Swift standard library's optional type
enum OptionalValue<T> {
case None
case Some(T)
}
var possibleInteger: OptionalValue<Int> = .None
possibleInteger = .Some(100)
以上这段代码就是Swift中的Optional类型的定义,我们定义?的类型就是定义了Optional这样一种类型
我们还可以通过关键字where来给泛型里面加一些条件限制,就像在SQL中书写where条件差不多一个意思,例如代码如下
func anyCommonElements <T, U where T: Sequence, U: Sequence, T.GeneratorType.Element: Equatable, T.GeneratorType.Element == U.GeneratorType.Element> (lhs: T, rhs: U) -> Bool {
for lhsItem in lhs {
for rhsItem in rhs {
if lhsItem == rhsItem {
return true
}
}
}
return false
}
anyCommonElements([1, 2, 3], [3])
以上代码中,Equatable是实现对比的协议接口,可以通过以下代码来了解一下
struct MyStruct: Equatable {
var name = "Untitled"
}
func == (lhs: MyStruct, rhs: MyStruct) -> Bool {
return lhs.name == rhs.name
}
let value1 = MyStruct()
var value2 = MyStruct()
let firstCheck = value1 == value2
// firstCheck is true
value2.name = "A New Name"
let secondCheck = value1 == value2
// secondCheck is false
那么我们就可以看出来了,要求T和U都是序列类型的,并且属性符合Equatable这个协议或者说叫实现这个接口
大体上Swift的入门语法就这么多了,后续还需要慢慢得学习,如果有不对的地方,还请大师指点修正!!
分享到:
相关推荐
"Swift编程入门与精通.pdf" 通常是市面上的第三方教材,旨在帮助读者从零开始直至熟练掌握Swift。这本书可能包含了基础到进阶的所有内容,包括如何构建实际应用、使用Swift进行iOS开发的流程、Swift UI设计、Xcode...
这份Swift入门教程和读书笔记是一份详尽的学习资料,它涵盖了Swift编程语言的基础知识,包括语法、数据类型、控制流、函数、闭包、面向对象编程等内容。同时,它还包含了大量的示例代码和实践练习,帮助读者更好地...
标题中的“swift 编程笔记”表明文档是关于Swift编程语言的学习笔记,而英文版意味着它主要使用英语语言编写。标题所涵盖的知识点包括了Swift编程语言的基础内容,这些内容可能与官方教程有区别,更偏向于实际应用。...
### Objective-C编程入门知识点概述 #### 一、Objective-C简介 Objective-C是一种通用、面向对象的编程语言,它是在标准C的基础上进行扩展的。Objective-C主要用于开发macOS和iOS的应用程序,也是苹果官方推荐用于...
这个"SwiftUI从入门到精通课程[视频课程].txt打包整理.zip"压缩包文件,显然是一个关于SwiftUI学习资源的集合,可能包含了课程大纲、笔记、代码示例等内容,旨在帮助开发者从初学者逐步成长为SwiftUI的专家。...
苹果官方提供的文档入口包括了Swift概括、Swift编程语言和使用Swift与Cocoa和Objective-C的指南,这些文档是学习Swift的基础,其中还包括了在线版(英文)以及爱好者翻译的在线版(中文)和PDF版本。此外,网络上...
Swift语言是苹果公司于2014年推出的一种开源编程语言,主要应用于iOS、macOS...通过本教程的学习,你将能够理解并掌握Swift的基本语法、类型系统、错误处理以及使用Xcode进行项目开发的流程,从而踏上Swift编程的大门。
"programming_language:编程语言学习笔记"这一主题旨在整理和探讨各种编程语言的关键特性、语法结构以及在实际开发中的应用。 首先,编程语言可以分为几大类别,如低级语言(机器语言和汇编语言)和高级语言(如C,...
《Swift Notes for Professional》是一本专为专业iOS开发者编写的英文版学习笔记,旨在提供超过200页的专业技巧...通过这些内容,专业iOS开发者能够全面了解并精通Swift编程语言,从而提升其在iOS开发领域的专业技能。
总的来说,这份"iOS新手入门学习资料"集合提供了全面的学习资源,从基础编程到具体的技术方案,覆盖了iOS开发的各个方面。通过深入学习并实践这些内容,你将逐步掌握iOS开发技能,踏上成为一名合格的iOS开发者之路。...
Swift是苹果公司推出的一种强大的编程语言,主要用于开发iOS、iPadOS、macOS、watchOS以及tvOS的应用程序。本教程“swift_study”旨在为初学者提供一个全面的Swift iPhone应用开发入门指南。通过一系列示例代码,你...
对于一门语言得学习,个人觉得最主要得就是其语法格式和那些关键字。 因为对于基本现在大多数得语言,每种语言都是一种符合人思维得方式来与计算机交流。 因此,其实每种语言中定义或是封装好得基础类和类库,其实都...
在Python的入门学习中,通常从"Hello World"程序开始,这是任何编程语言的基本示例,用于演示语言的基本输出功能。在Python中,只需一行简单的`print("Hello World")`即可完成。 总结来说,Python因其易学性、丰富...
Swift编程基础 - 学习Swift语言的基本概念,如变量、数据类型、函数、循环语句等。 - 熟悉Swift中的错误处理机制、泛型编程等高级特性。 ##### 2. Xcode使用技巧 - 掌握Xcode的项目管理、版本控制等功能。 - 熟悉...
【CS193P笔记】是一份针对"CS193P"课程的详细学习资料,这门课程是斯坦福大学开设的iPhone与iPad编程入门课程。这份笔记涵盖了iOS开发的基础知识,包括Objective-C编程语言、Swift语言(可能在后续版本中涉及)、...
Objective-C是iOS开发的主要编程语言,尽管现在Swift已经逐渐成为主流,但Objective-C仍然是很多经典教程和开源项目的基础。资料中包含的"Objective-C_2.0 基础教程"和"Objective-C 高级教程"是学习Objective-C的好...
"IOS_er:记录学习知识的项目与笔记"是一个专门为iOS开发者设立的项目,旨在系统性地记录并整理Swift编程及SwiftUI框架的学习过程和实践经验。 首先,Swift是一种强大的、类型安全的编程语言,它引入了许多现代编程...
这是一份专门为初学者设计的学习资源,旨在帮助他们快速入门iOS开发,了解如何利用Apple的Swift语言和Xcode集成开发环境(IDE)来创建简单的应用。 【描述】:“iPhone编程学习用的小demo,学习之用,方便自己取用...
4. **Objective-C入门教程中文版**: Objective-C是iOS开发中传统的编程语言,这个教程为初学者提供了一个基础的学习起点,内容可能包括语法介绍、基础概念、面向对象编程等。 5. **Cocos2d游戏开发实例**: Cocos2d...