第1章 介绍 1
1.1 本书所面向的读者 2
1.2 主题 3
1.3 术语 6
1.4 Swift风格指南 9
第2章 内建集合类型 11
2.1 数组 11
数组和可变性 11
数组和可选值 13
数组变形 14
数组类型 25
2.2 字典 27
可变性 28
有用的字典扩展 28
Hashable要求 30
2.3 Set 31
集合代数 32
索引集合和字符集合 33
在闭包中使用集合 34
2.4 Range 34
第3章 集合类型协议 37
3.1 序列 37
迭代器 38
无限序列 44
不稳定序列 44
序列和迭代器之间的关系 45
子序列 46
3.2 集合类型 47
为队列设计协议 48
队列的实现 50
遵守Collection协议 51
遵守ExpressibleByArrayLiteral协议 54
关联类型 55
3.3 索引 57
索引失效 58
索引步进 59
链表 60
3.4 切片 70
实现自定义切片 71
切片与原集合共享索引 74
通用的PrefixIterator 74
3.5 专门的集合类型 75
前向索引 76
双向索引 77
随机存取索引 78
MutableCollection 79
RangeReplaceableCollection 80
3.6 总结 82
第4章 可选值 84
4.1 哨岗值 84
4.2 通过枚举解决魔法数的问题 86
4.3 可选值概览 88
if let 88
while let 89
双重可选值 92
if var and while var 94
解包后可选值的作用域 95
可选链 97
nil合并运算符 99
可选值map 101
可选值flatMap 103
使用flatMap过滤nil 104
可选值判等 105
switch-case匹配可选值 108
可选值比较 109
4.4 强制解包的时机 109
改进强制解包的错误信息 111
在调试版本中进行断言 111
4.5 多灾多难的隐式可选值 113
隐式可选值行为 113
4.6 总结 114
第5章 结构体和类 115
5.1 值类型 116
5.2 可变性 117
5.3 结构体 120
5.4 写时复制 127
写时复制(昂贵方式) 129
写时复制(高效方式) 130
写时复制的陷阱 132
5.5 闭包和可变性 134
5.6 内存 135
weak引用 137
unowned引用 138
5.7 闭包和内存 139
结构体和类使用实践 139
5.8 闭包和内存 142
引用循环 143
捕获列表 144
5.9 总结 145
第6章 函数 146
6.1 函数的灵活性 152
函数作为数据 155
6.2 局部函数和变量捕获 161
6.3 函数作为代理 163
Foundation框架的代理 163
结构体代理 164
使用函数,而非代理 165
6.4 inout参数和可变方法 167
嵌套函数和inout 169
&不意味inout的情况 170
6.5 计算属性和下标 171
延迟存储属性 172
使用不同参数重载下标 173
下标进阶 175
6.6 自动闭包 175
@escaping标注 177
6.7 总结 179
第7章 字符串 180
7.1 不再固定宽度 180
字位簇和标准等价 181
7.2 字符串和集合 184
字符串与切片 187
7.3 简单的正则表达式匹配器 189
7.4 ExpressibleByStringLiteral 192
7.5 String的内部结构 193
Character的内部组织结构 199
7.6 编码单元表示方式 199
7.7 CustomStringConvertible和CustomDebugStringConvertible 201
7.8 文本输出流 203
7.9 字符串性能 207
7.10 展望 211
第8章 错误处理 212
8.1 Result类型 213
8.2 抛出和捕获 214
8.3 带有类型的错误 216
8.4 将错误桥接到Objective-C 217
8.5 错误和函数参数 218
Rethrows 220
8.6 使用defer进行清理 221
8.7 错误和可选值 222
8.8 错误链 223
链结果 223
8.9 高阶函数和错误 224
8.10 总结 226
第9章 泛型 228
9.1 重载 228
自由函数的重载 229
运算符的重载 230
使用泛型约束进行重载 231
使用闭包对行为进行参数化 235
9.2 对集合采用泛型操作 236
二分查找 236
泛型二分查找 238
集合随机排列 241
SubSequence和泛型算法 244
重写与优化 246
9.3 使用泛型进行代码设计 247
提取共通功能 249
创建泛型数据类型 250
9.4 泛型的工作方式 251
泛型特化 253
全模块优化 254
9.5 总结 255
第10章 协议 256
10.1 面向协议编程 258
协议扩展 260
在协议扩展中重写方法 260
10.2 协议的两种类型 262
类型抹消 264
10.3 带有Self的协议 267
10.4 协议内幕 269
性能影响 270
10.5 总结 271
第11章 互用性 272
11.1 实践:封装CommonMark 272
封装C代码库 272
封装cmark_node类型 273
更安全的接口 278
11.2 低层级类型概览 284
11.3 函数指针 286