第1章 初识Swift 1
1.1 Swift语言是什么 2
1.2 Swift语言为什么重要 3
1.3 配置开发环境 3
1.3.1 创建Playground项目 5
1.3.2 创建iOS项目 6
1.4 Swift语法 10
1.4.1 常量 10
1.4.2 变量 12
1.4.3 字符串插值:在字符串中包含值 13
1.4.4 声明 14
1.4.5 输出 14
1.4.6 注释 15
1.5 本章小结 16
第2章 数据类型 19
2.1 基本数据类型 20
2.1.1 整型 20
2.1.2 浮点型数字 22
2.1.3 类型别名 24
2.1.4 布尔型 24
2.2 元组 25
2.3 可选类型 26
2.3.1 隐式打开可选类型 27
2.3.2 可选绑定 28
2.3.3 用?符号打开可选值 29
2.4 枚举 29
2.4.1 在Swift语句中使用枚举 30
2.4.2 枚举原始值 31
2.4.3 原始值自增 32
2.4.4 关联值 33
2.4.5 枚举函数 34
2.5 本章小结 35
第3章 字符串和字符 39
3.1 字符串 39
3.1.1 可变的字符串 40
3.1.2 值类型的String 40
3.1.3 字符 41
3.1.4 字符串的连接 42
3.1.5 特殊字符 43
3.1.6 Unicode 44
3.2 常见的字符串函数 45
3.2.1 相等 45
3.2.2 前缀和后缀 46
3.2.3 长度 47
3.2.4 子字符串 48
3.2.5 将字符串转换为数组 50
3.2.6 类型转换 50
3.3 与NSString的互操作 51
3.3.1 把String转换为NSString 52
3.3.2 直接使用NSString 53
3.3.3 使用String还是NSString? 54
3.4 本章小结 55
第4章 基本运算符 57
4.1 赋值运算符 57
4.2 算术运算符 58
4.2.1 加法运算符 59
4.2.2 减法运算符 59
4.2.3 乘法运算符 60
4.2.4 除法运算符 60
4.2.5 取模运算符 61
4.2.6 递增和递减运算符 61
4.2.7 复合赋值运算符 62
4.2.8 nil连接运算符 62
4.3 比较运算符 63
4.3.1 等于和不等于 63
4.3.2 大于或大于等于 65
4.3.3 小于或小于等于 65
4.4 区间运算符 65
4.5 逻辑运算符 67
4.5.1 逻辑非 67
4.5.2 逻辑与 67
4.5.3 逻辑或 68
4.5.4 组合逻辑运算符 69
4.5.5 三元运算符 70
4.6 本章小结 70
第5章 函数 73
5.1 函数的定义与调用 73
5.1.1 输入参数 74
5.1.2 返回值 74
5.1.3 返回多个值 75
5.1.4 函数参数名称 75
5.1.5 形参名的简写方式 77
5.1.6 默认参数值 77
5.1.7 可变(变量)参数 78
5.1.8 常量和变量参数 79
5.1.9 输入输出参数 80
5.2 函数类型 80
5.2.1 定义函数类型的变量 81
5.2.2 调用函数类型的变量 81
5.2.3 返回函数中的函数类型 82
5.3 嵌套函数 83
5.4 本章小结 83
第6章 集合 85
6.1 数组 86
6.1.1 可变数组 86
6.1.2 数组数据类型 86
6.1.3 从数组中获取元素 87
6.1.4 向数组中插入元素 87
6.1.5 修改数组中的元素 88
6.1.6 将元素附加到数组中 88
6.1.7 检查数组的大小 88
6.1.8 从数组中移除元素 89
6.1.9 数组的遍历 89
6.1.10 创建空数组 90
6.1.11 测试数组是否相等 91
6.2 字典 91
6.2.1 可变字典 92
6.2.2 获取字典中的元素 93
6.2.3 检查字典的大小 93
6.2.4 修改字典中的元素 93
6.2.5 移除字典中的元素 94
6.2.6 字典的遍历 95
6.2.7 创建空字典 96
6.2.8 测试字典是否相等 96
6.3 数组和字典的复制行为 97
6.4 本章小结 98
第7章 控制流和循环 101
7.1 控制流 101
7.1.1 if语句 102
7.1.2 if-else语句 103
7.1.3 switch语句 104
7.1.4 where子句 111
7.2 循环 112
7.2.1 for-in循环 112
7.2.2 传统的for循环 115
7.2.3 while循环 116
7.2.4 do-while循环 117
7.2.5 控制转移语句 118
7.3 本章小结 122
第8章 结构体和类 125
8.1 结构体 125
8.1.1 成员级初始化器 127
8.1.2 结构体的类型 127
8.1.3 结构体比较 129
8.2 类 129
8.2.1 类的定义 130
8.2.2 属性 130
8.2.3 初始化器 138
8.2.4 初始化器与形参名 139
8.2.5 在初始化期间对变量和常量进行初始化 141
8.2.6 类是引用类型 142
8.2.7 类中的方法 146
8.2.8 类方法 149
8.2.9 结构体中的方法 150
8.3 本章小结 152
第9章 继承 155
9.1 认识继承 156
9.1.1 定义基类 156
9.1.2 基类的实例化 156
9.1.3 创建抽象类 156
9.1.4 从基类中继承 158
9.2 初始化器的类型 165
9.2.1 默认初始化器 165
9.2.2 指定初始化器 166
9.2.3 便利初始化器和初始化器链 168
9.2.4 在子类中调用初始化器 170
9.3 扩展 170
9.3.1 扩展方法 171
9.3.2 扩展属性 171
9.4 访问控制 172
9.4.1 Internal 173
9.4.2 private 174
9.4.3 public 174
9.5 本章小结 175
第10章 闭包 177
10.1 理解闭包 178
10.1.1 函数闭包 178
10.1.2 将闭包赋值给变量 179
10.1.3 编写内置闭包 179
10.1.4 类型推断 180
10.1.5 简写参数名称 181
10.1.6 运算符函数 181
10.1.7 尾部闭包 182
10.2 使用数组的三个闭包功能 182
10.2.1 map()函数 182
10.2.2 filter()函数 184
10.2.3 reduce函数 186
10.3 在函数中使用闭包 187
10.4 本章小结 190
第11章 协议与代理 191
11.1 理解协议 191
11.1.1 协议的定义与使用 192
11.1.2 可选方法 194
11.1.3 遵循多个协议 195
11.1.4 必须实现的初始化器 196
11.2 理解代理 197
11.2.1 作为事件处理程序的代理 197
11.2.2 协议和代理的示例 201
11.3 本章小结 203
第12章 泛型 205
12.1 理解泛型 205
12.1.1 使用泛型函数 206
12.1.2 多类型参数 207
12.1.3 指定类型约束 208
12.2 泛型类型 209
12.2.1 泛型类 209
12.2.2 泛型结构体 210
12.2.3 泛型类型扩展 212
12.2.4 在协议中使用泛型 213
12.2.5 为相关类型指定需求 215
12.3 本章小结 217
附录 习题答案 219