第1篇 Swift 4基础语法篇 3
第1章 关于Swift 3
第2章 Swift语法基础 7
2.1 变量和常量 7
2.2 注释 8
2.3 分号 9
2.4 整数 9
2.5 浮点数 10
2.6 类型安全和类型推断 10
2.7 数值型字面量 10
2.8 数值类型转换 11
2.9 布尔类型 13
2.10 元组 13
2.11 可选类型 14
2.12 错误处理 15
2.13 断言 16
第3章 Swift基本运算符 17
3.1 术语 17
3.2 赋值运算符 17
3.3 算术运算符 18
3.4 组合赋值运算符 19
3.5 比较运算符 19
3.6 三元(目)运算符 20
3.7 空合运算符 21
3.8 区间运算符 22
3.9 逻辑运算符 23
第4章 Swift字符串和字符 26
4.1 字符串字面量 26
4.2 初始化空字符串 26
4.3 字符串可变性 27
4.4 字符串都是值类型 27
4.5 使用字符 27
4.6 连接字符串与字符 28
4.7 字符串插入值 28
4.8 Unicode 29
4.9 计算字符数量 31
4.10 访问与修改字符串 31
4.11 比较字符串 33
第5章 Swift集合类型 35
5.1 数组 35
5.2 集 39
5.3 字典 42
第6章 Swift控制流 46
6.1 for循环 46
6.1.1 for-in 47
6.1.2 for条件递增 48
6.2 while循环 48
6.2.1 while 49
6.2.2 repeat while 49
6.3 if语句 50
6.4 guard语句 51
6.5 switch语句 52
6.6 控制转移语句 54
6.6.1 continue语句 54
6.6.2 break语句 55
6.6.3 fallthrough语句 56
6.6.4 return语句 57
第7章 Swift函数 58
7.1 函数的定义和调用 58
7.2 函数的参数和返回值 59
7.2.1 多个输入参数的函数 59
7.2.2 没有参数的函数 59
7.2.3 没有返回值的函数 60
7.2.4 没有返回值的函数调用具有返回值的函数 60
7.2.5 多个返回值的函数 60
7.2.6 元组可选类型返回值的函数 61
7.3 函数的参数名称 62
7.3.1 外部参数名称 62
7.3.2 带默认值参数的函数 62
7.3.3 可变参数的函数 63
7.3.4 常量参数和变量参数 63
7.3.5 输入和输出参数 64
7.4 函数类型 65
7.4.1 使用函数类型 65
7.4.2 使用函数类型作为参数 65
7.4.3 使用函数类型作为返回值 66
7.4.4 使用函数类型作为常量 66
7.5 嵌套函数 67
第8章 Swift闭包 68
8.1 闭包的定义 68
8.2 闭包表达式 69
8.2.1 sorted函数 69
8.2.2 使用闭包表达式 70
8.2.3 根据上下文推断参数 70
8.2.4 单表达式闭包省掉返回关键字 70
8.2.5 参数名称缩写 71
8.2.6 运算符函数 71
8.3 挂尾闭包 71
8.4 闭包的值捕获 72
8.5 闭包是引用类型 73
第9章 Swift枚举 74
9.1 枚举的定义、结构和使用 74
9.2 枚举在switch语句中的使用 75
9.3 枚举关联值 75
9.4 枚举原始值 76
第10章 Swift类和结构体 77
10.1 类和结构体的对比 77
10.1.1 类和结构体的定义 78
10.1.2 类和结构体的实例 78
10.1.3 类和结构体的属性访问 78
10.2 结构体是值类型 79
10.3 类是引用类型 79
10.4 如何选择类和结构体 79
10.5 集合类型的赋值和复制 80
第11章 Swift属性 81
11.1 存储属性 81
11.1.1 普通存储属性 81
11.1.2 延迟存储属性 82
11.2 计算属性 82
11.3 属性观察器 84
11.4 全局变量和局部变量 85
11.5 静态属性 85
第12章 Swift方法 86
12.1 实例方法 86
12.1.1 使用类中定义的实例方法 86
12.1.2 使用结构体中定义的实例方法 87
12.1.3 使用枚举中定义的实例方法 88
12.2 静态方法 89
12.2.1 使用类中定义的静态方法 89
12.2.2 使用结构体中定义的静态方法 89
第13章 Swift下标 91
13.1 下标的定义 91
13.2 下标的用法 92
13.3 下标脚本 93
第14章 Swift继承 95
14.1 继承的定义 95
14.2 继承的一般用法 95
14.3 重写父类的方法和属性 96
14.3.1 重写父类的方法 96
14.3.2 重写父类的属性 97
14.4 防止父类的特性被重写 98
第15章 Swift初始化 99
15.1 初始化的定义 99
15.2 为存储属性设置初始值 99
15.3 自定义构造函数 100
15.4 默认构造函数 101
15.5 值类型的初始化 102
15.6 引用类型的初始化 103
15.6.1 指定构造函数和便利构造函数 104
15.6.2 类的代理初始化调用 104
15.6.3 两段式构造过程 105
15.6.4 构造函数的继承和重写 107
15.6.5 自动构造函数的继承 108
15.6.6 指定和便利构造器的实战 109
15.7 可失败构造函数 111
15.8 必要构造函数 116
15.9 通过闭包或方法设置属性的默认值 116
第16章 Swift析构 119
16.1 析构的原理 119
16.2 析构的实战 119
第17章 Swift错误处理 122
17.1 创建错误类型 122
17.2 抛出错误 123
17.3 捕获和处理错误 124
17.4 不处理错误 126
17.5 将错误转为可选类型 126
第18章 Swift泛型 128
18.1 泛型能解决的问题 128
18.2 泛型函数 129
18.3 类型参数 130
18.4 命名类型参数 131
18.5 泛型类型 131
18.6 泛型类型的扩展 133
18.7 类型约束 134
18.8 关联类型 136
18.9 条件语句 138
第19章 Swift扩展 140
19.1 扩展的定义和语法 140
19.2 扩展计算属性 140
19.3 扩展构造函数 141
19.4 扩展方法 143
19.5 扩展下标 144
19.6 扩展嵌套函数 144
第20章 Swift协议 146
20.1 协议的定义和语法 146
20.2 对属性的规定 147
20.3 对方法的规定 148
20.4 对变异方法的规定 149
20.5 对构造函数的规定 150
20.6 协议也是一种类型 151
20.7 代理 152
20.8 在扩展中添加协议 155
20.9 协议类型的集合 155
20.10 协议的继承 156
20.11 协议类型的组合 157
20.12 检查协议的一致性 158
第2篇 iOS 11基础开发篇 163
第21章 入门级 163
21.1 开发环境配置 163
21.2 Playground 164
21.3 第一个App 168
21.4 创建用户交互 178
第22章 初级 181
22.1 Auto Layout 181
22.2 Stack View 184
22.3 Size Class 192
22.4 Table View 197
22.4.1 原型单元格 199
22.4.2 代理模式 201
22.4.3 连接数据源 203
22.5 自定义单元格 204
22.6 单元格交互 216
22.7 单元格滑动菜单 219
22.8 导航和转场 226
第23章 中级 235
23.1 Model重构 235
23.2 静态单元格 241
23.3 导航栏、状态条和动态字体的定制技巧 248
23.4 视差动画 256
23.5 特效、动画和手势 259
23.6 JSON编/解码 271
23.7 录入新数据场景 276
23.8 真机部署 285
23.9 相册、拍照和录制视频 287
第3篇 游戏实战篇 299
第 24章 卡牌斗兽棋 299
24.1 项目介绍与分析 299
24.2 项目框架搭建 301
24.3 首页和棋盘控制器的搭建 306
24.4 相关model和走棋逻辑的实现 330
24.5 单机双人对战的实现 337
24.6 人机对战的实现 360
24.7 联网对战的实现 371
24.8 联网对战的优化 400