第1章 从简单的范例谈起 1
1.1 编写您的第一个程序 1
1.2 程序解析 6
1.3 Playground介绍 6
习题 10
第2章 变量、常量以及数据类型 12
2.1 简述变量与常量 12
2.2 简述数据类型 12
2.3 声明变量与常量 15
2.4 输出变量与常量 18
2.5 注释语句 19
2.6 分号 19
2.7 字符串类型 19
2.7.1 字符串的函数 21
2.7.2 字符串属于值类型 24
2.8 选项类型 24
习题 25
第3章 运算符 29
3.1 算术运算符 29
3.2 关系运算符 30
3.3 逻辑运算符 31
3.4 自增与自减运算符 32
3.5 赋值运算符 34
习题 35
第4章 循环语句 38
4.1 for循环语句 38
4.2 while循环语句 42
4.3 do…while循环语句 44
4.4 for-in循环语句 45
4.5 嵌套循环 47
4.6 String(format:)格式 54
习题 54
第5章 选择语句 59
5.1 if语句 59
5.2 if…else语句 61
5.3 else…if语句 64
5.4 switch语句 66
5.5 条件运算符 72
5.6 break、continue及fallthrough语句 72
习题 75
第6章 集合类型 79
6.1 数组的表示法 79
6.1.1 数组的运行与一些常用的API 81
6.1.2 二维数组 86
6.2 字典的表示法 87
6.3 集合类型的赋值与复制行为 90
6.3.1 数组的赋值与复制行为 90
6.3.2 字典的赋值与复制行为 93
习题 96
第7章 函数 101
7.1 定义与调用函数 101
7.1.1 函数的参数 104
7.1.2 函数的返回值 105
7.1.3 返回多个值 106
7.2 函数的参数名 108
7.2.1 外部参数名 108
7.2.2 默认参数值 109
7.2.3 可变参数 110
7.2.4 参数的类型 111
7.3 函数类型 113
7.3.1 函数类型作为变量的类型 115
7.3.2 函数类型作为参数的类型 116
7.3.3 函数类型作为返回值的类型 116
7.4 嵌套函数 117
7.5 局部与全局变量 118
习题 119
第8章 闭包 122
8.1 闭包表达式 122
8.1.1 推导类型格式 123
8.1.2 明确地从单一表达式的闭包返回 124
8.1.3 速记自变量名 125
8.1.4 运算符函数 126
8.2 尾随闭包 126
8.3 获取值 128
8.4 闭包是引用类型 129
习题 129
第9章 类、结构与枚举 133
9.1 类与结构的比较 133
9.1.1 值类型 135
9.1.2 引用类型 137
9.1.3 “===”与“!==”运算符 139
9.2 枚举的语法 141
9.2.1 在switch语句中使用枚举值 142
9.2.2 关联值 143
9.2.3 rawValue值 145
习题 146
第10章 属性与方法 149
10.1 存储型属性 149
10.2 计算属性 153
10.2.1 setter声明速记 155
10.2.2 只读计算属性 156
10.3 属性观察者 157
10.4 类型属性 159
10.5 实例方法 160
10.5.1 方法的局部与外部参数名称 161
10.5.2 self属性 163
10.5.3 修改值类型的实例方法 164
10.6 类型方法 165
习题 167
第11章 继承 171
11.1 父类 171
11.2 子类 173
11.3 重写 175
11.3.1 重写方法 175
11.3.2 重写访问的属性 177
11.3.3 重写属性观察者 180
习题 183
第12章 初始化与析构 188
12.1 初始化 188
12.2 类的继承与初始化 192
12.2.1 指定构造器与便捷构造器 192
12.2.2 语法与范例 194
12.3 析构 199
习题 200
第13章 自动引用计数 203
13.1 自动引用计数如何工作 203
13.2 类实例之间的强引用循环 204
13.3 解决类实例之间强引用循环的方法 207
13.3.1 弱引用 207
13.3.2 无主引用 210
13.3.3 无主引用与隐式解析可选属性 212
习题 213
第14章 可选链 216
14.1 可选链作为强制解析的方法 216
14.2 通过可选链调用属性、方法 217
14.2.1 通过可选链调用属性 218
14.2.2 通过可选链调用方法 220
14.3 多重链 221
习题 222
第15章 类型转换与扩展 224
15.1 检查类型 224
15.2 向下转型 226
15.3 对AnyObject和Any的类型转换 227
15.3.1 AnyObject 227
15.3.2 Any 228
15.4 扩展 229
15.4.1 属性的扩展 230
15.4.2 构造函数与方法的扩展 230
15.4.3 索引的扩展 232
习题 233
第16章 协议 237
16.1 属性的协议 237
16.2 方法的协议 239
16.3 作为类型的协议 241
16.4 协议以扩展方式加入 242
16.5 协议的继承 244
16.6 协议的组合 245
16.7 检查是否遵守协议 246
习题 248
第17章 泛型 252
17.1 泛型类型 252
17.1.1 两数对调 252
17.1.2 队列的运行 256
17.2 类型约束 264
17.2.1 查找某个值位于数组中的位置 264
17.2.2 气泡排序 267
17.3 关联类型 272
习题 277
第18章 位运算符与运算符函数 281
18.1 位运算符 281
18.1.1 用来判断与设置位的状态 284
18.1.2 实现乘除的功能 285
18.1.3 实现两数对调 286
18.2 运算符函数 288
18.2.1 prefix与postfix运算符 288
18.2.2 组合赋值运算符 289
18.2.3 个性化运算符 293
习题 294