第1章 未来的iOS开发语言——Swift语言介绍 1
1.1 Swift语言的前世今生 1
1.2 Swift到底是怎样的一种语言 2
1.3 Swift开发环境搭建 5
1.4 创建Swift工程(OS X和iOS平台) 6
1.5 瞧一瞧Swift到底长啥样 8
1.6 所见即所得的Playground 11
1.7 小结 13
第2章 千里之行始于足下——Swift语言基础 14
2.1 Swift语句和分号 14
2.2 变量和常量 15
2.2.1 定义和初始化 15
2.2.2 将变量和常量值插入字符串中 18
2.2.3 变量和常量的命名规则 19
2.2.4 为变量和常量指定数据类型 20
2.3 数据类型 20
2.3.1 整数类型 20
2.3.2 数制转换 22
2.3.3 浮点类型 23
2.3.4 数值的可读性 23
2.3.5 数值类型之间的转换 23
2.3.6 类型别名 24
2.3.7 布尔类型 25
2.4 字符和字符串 26
2.4.1 字符类型的常量和变量 26
2.4.2 字符串类型的常量和变量 26
2.4.3 枚举字符串中的所有字符 27
2.4.4 获取字符串中字符的Unicode编码 27
2.4.5 字符串和字符的连接 28
2.4.6 在字符串中包含特殊字符 28
2.4.7 字符串之间的比较 29
2.4.8 字符串的大小写转换 29
2.5 元组(tuples)类型 30
2.5.1 元组类型的定义 30
2.5.2 获取元组中的元素值 30
2.5.3 为元组中的元素命名 31
2.6 可选类型 31
2.7 注释 33
2.8 小结 33
第3章 万丈高楼平地起——基本操作符 34
3.1 操作符的种类 34
3.2 赋值操作符 35
3.3 数值操作符 36
3.3.1 四则运算操作符 36
3.3.2 整数求余 37
3.3.3 浮点数求余 38
3.3.4 自增和自减 38
3.3.5 一元负号和正号 39
3.4 复合赋值操作符 39
3.5 比较操作符 39
3.6 三元条件操作符 40
3.7 区间操作符 41
3.8 逻辑操作符 42
3.8.1 逻辑非 43
3.8.2 逻辑与 43
3.8.3 逻辑或 44
3.8.4 组合逻辑 44
3.8.5 使用圆括号指定优先级 45
3.9 小结 45
第4章 此字典非彼字典——数组和字典 46
4.1 数组(Array) 46
4.1.1 创建和初始化数组 47
4.1.2 创建空数组 48
4.1.3 创建固定长度的数组 49
4.1.4 数组的加法 49
4.1.5 获取和设置数组元素值 49
4.1.6 数组区间赋值 50
4.1.7 添加和删除数组元素 51
4.1.8 枚举数组中的所有元素 52
4.2 字典(Dictionary) 53
4.2.1 创建和初始化字典 53
4.2.2 创建空的字典 54
4.2.3 添加、修改和删除字典中的数据 55
4.2.4 获取字典中的值 56
4.2.5 将value转换为指定的类型值 56
4.2.6 枚举字典中的key和value 57
4.2.7 将keys和values转换为数组 58
4.3 小结 59
第5章 千变万化的程序——控制流 60
5.1 for循环 60
5.1.1 对区间操作符进行循环 61
5.1.2 枚举数组和字典中的元素 62
5.1.3 枚举字符串中的所有字符 63
5.1.4 条件增量for循环语句 63
5.2 while和do...while循环 65
5.2.1 while循环 65
5.2.2 do...while循环 66
5.3 条件语句(if和switch) 67
5.3.1 if条件语句 67
5.3.2 Switch条件语句的基本用法 67
5.3.3 fallthrough语句 69
5.3.4 使用区间操作符进行条件匹配 70
5.3.5 使用元组进行条件匹配 71
5.3.6 where子句 71
5.4 在控制流中使用的控制语句(continue和break) 72
5.5 可跳转的标签 74
5.6 小结 75
第6章 丰富多彩的功能——函数 76
6.1 函数的定义和调用 76
6.2 返回多值的函数 78
6.3 扩展参数 79
6.4 扩展参数和内部参数合二为一 80
6.5 默认参数值 81
6.6 可变参数 82
6.7 常量和变量参数 82
6.8 输入输出参数 83
6.9 函数类型 83
6.10 嵌套函数 85
6.11 小结 86
第7章 代码之美的诠释——闭包 87
7.1 闭包表达式 87
7.1.1 使用闭包表达式代替回调函数 87
7.1.2 省略参数类型 88
7.1.3 省略返回值类型 89
7.1.4 省略return语句 89
7.1.5 既然都一样,那就去掉一个 89
7.1.6 直接给跪了!连骨架都没了 90
7.2 尾随闭包 90
7.3 捕获值 92
7.4 闭包是引用类型 94
7.5 小结 94
第8章 特殊的数据——枚举类型 95
8.1 枚举类型的语法格式 95
8.2 匹配枚举成员 96
8.3 组合枚举成员 97
8.4 设置枚举成员的原始值 99
8.5 小结 100
第9章 Swift语言的核心——类和结构体 101
9.1 类和结构体基础 102
9.1.1 类和结构体的异同点 102
9.1.2 定义类和结构体 103
9.1.3 创建类和结构体实例 103
9.1.4 访问和设置类和结构体成员的值 104
9.1.5 值类型和引用类型 104
9.1.6 判断两个变量或常量引用了同一个类对象 106
9.2 属性 107
9.2.1 存储属性 107
9.2.2 惰性存储属性 108
9.2.3 可读写的计算属性 109
9.2.4 只读计算属性 111
9.2.5 属性观察器 112
9.2.6 静态属性 114
9.3 方法 116
9.3.1 实例方法 116
9.3.2 方法的局部参数名和外部参数名 117
9.3.3 为方法的第一个参数增加外部参数名 118
9.3.4 类型中的self 119
9.3.5 方法的变异(mutating) 120
9.3.6 类型方法 121
9.4 构造器 122
9.4.1 没有参数的构造器 122
9.4.2 构造器重载 122
9.4.3 构造器的内部参数和外部参数 123
9.4.4 默认构造器 124
9.4.5 结构体的逐一成员构造器 124
9.5 析构器 124
9.6 为类和结构体增加下标(Subscript)操作 125
9.7 小结 127
第10章 容易犯错的地方——类的继承 128
10.1 如何继承一个父类 128
10.2 重写方法 130
10.3 重写属性 131
10.4 重写属性观察器 132
10.5 方法被重写 133
10.6 构造器在继承中的调用规则 133
10.6.1 构造器和便利构造器 134
10.6.2 指定构造器和便利构造器是如何继承的 136
10.6.3 为什么子类必须调用父类的构造器 137
10.7 小结 140
第11章 内存管理机制——ARC 141
11.1 ARC的工作原理 141
11.2 测试ARC在内存管理中所起到的作用 142
11.3 解决循环强引用问题 143
11.3.1 什么是循环强引用 143
11.3.2 弱引用 144
11.3.3 无主引用 146
11.4 闭包引起的循环强引用 147
11.5 小结 149
第12章 让程序不抛出异常顺畅运行——可选链 150
12.1 什么是可选链 150
12.2 使用可选链访问属性 151
12.3 使用可选链调用方法 152
12.4 使用可选链调用下标 152
12.5 多层连续使用可选链 154
12.6 对方法返回值执行可选链 155
12.7 小结 156
第13章 Swift语言的魔法——类型转换 157
13.1 类型转换概述 157
13.2 类型检测 158
13.3 类型强行转换 159
13.4 AnyObject和Any的类型转换 160
13.4.1 AnyObject类型 160
13.4.2 Any类型 161
13.5 小结 163
第14章 为程序增添无限动力——扩展 164
14.1 什么是扩展 164
14.2 扩展语法 165
14.3 扩展计算型属性 165
14.4 扩展构造器 166
14.5 扩展方法 167
14.6 修改实例方法 168
14.7 扩展下标 168
14.8 扩展嵌套类型 169
14.9 小结 170
第15章 开发大型程序必备元素——协议 171
15.1 协议的语法 171
15.2 协议中的成员 172
15.2.1 属性 172
15.2.2 方法 174
15.2.3 突变方法 176
15.3 协议类型 176
15.4 委托(Delegate) 177
15.5 在扩展中添加成员 180
15.6 通过扩展补充协议声明 181
15.7 集合中的协议类型 182
15.8 继承协议 182
15.9 协议合成 183
15.10 校验协议的一致性 184
15.11 可选协议的约定 186
15.12 小结 189
第16章 增强代码的灵活性——泛型 190
16.1 泛型解决的问题 190
16.1.1 引出问题 190
16.1.2 泛型函数 192
16.2 类型参数 193
16.3 泛型类型 194
16.4 扩展泛型类型 197
16.5 类型约束 197
16.5.1 类型约束语法 198
16.5.2 类型约束行为 198
16.6 关联类型 200
16.6.1 关联类型行为 200
16.6.2 扩展一个存在的类型为一指定关联类型 202
16.7 Where语句 203
16.8 小结 205
第17章 私人定制——高级操作符 206
17.1 位操作符 206
17.1.1 按位取反操作符 207
17.1.2 按位与操作符 207
17.1.3 按位或操作符 208
17.1.4 按位异或操作符 208
17.1.5 按位左移/右移操作符 209
17.2 溢出操作符 212
17.2.1 值的上溢出 212
17.2.2 值的下溢出 213
17.2.3 除零溢出 214
17.3 优先级和结合性 214
17.4 操作符函数 215
17.4.1 二元操作符函数 215
17.4.2 前置和后置操作符函数 217
17.4.3 组合赋值操作符函数 217
17.4.4 等值操作符函数 218
17.4.5 定制操作符 219
17.4.6 自定义中置操作符的优先级和结合性 219
17.5 小结 220
第18章 做未来的iOS程序员——Swift开发iOS应用技术 221
18.1 创建iOS工程 221
18.2 iOS工程概述 223
18.2.1 应用程序代理 224
18.2.2 视图控制器 225
18.2.3 故事板 225
18.2.4 图像集合 226
18.3 运行iOS应用 226
18.4 实现一个可以浏览Web页面的程序 227
18.4.1 调整故事板的大小 227
18.4.2 在故事板中设计UI 229
18.4.3 UI与视图控制器关联 229
18.4.4 浏览网页 231
18.4.5 改变视图控制器 232
18.5 小结 233
第19章 开启游戏开发之旅——SpriteKit游戏引擎 234
19.1 创建游戏工程 234
19.2 游戏工程的结构 235
19.3 运行游戏工程 236
19.4 默认游戏工程原理解析 237
19.4.1 游戏的入口点 237
19.4.2 创建初始化 238
19.4.3 捕捉屏幕的触摸动作 239
19.5 小结 240
第20章 综合应用实战——Flappybird游戏开发 241
20.1 游戏效果演示 241
20.2 添加游戏资源 242
20.3 游戏的初始化 242
20.4 创建一对管道 246
20.5 通过触摸屏幕让小鸟跳起 248
20.6 用物理引擎进行碰撞检测 248
20.7 小结 250