内容简介
第1章 介绍
1.1 本书所面向的读者
1.2 主题
1.3 术语
1.4 Swift风格指南
第2章 内建集合类型
2.1 数组
数组和可变性
数组和可选值
数组变形
数组类型
2.2 字典
可变性
有用的字典扩展
Hashable要求
2.3 Set
集合代数
索引集合和字符集合
在闭包中使用集合
2.4 Range
第3章 集合类型协议
3.1 序列
迭代器
无限序列
不稳定序列
序列和迭代器之间的关系
子序列
3.2 集合类型
为队列设计协议
队列的实现
遵守Collection协议
遵守ExpressibleByArrayLiteral协议
关联类型
3.3 索引
索引失效
索引步进
链表
3.4 切片
实现自定义切片
切片与原集合共享索引
通用的PrefixIterator
3.5 专门的集合类型
前向索引
双向索引
随机存取索引
MutableCollection
RangeReplaceableCollection
3.6 总结
第4章 可选值
4.1 哨岗值
4.2 通过枚举解决魔法数的问题
4.3 可选值概览
if let
while let
双重可选值
if var and while var
解包后可选值的作用域
可选链
nil合并运算符
可选值map
可选值flatMap
使用flatMap过滤nil
可选值判等
switch-case匹配可选值
可选值比较
4.4 强制解包的时机
改进强制解包的错误信息
在调试版本中进行断言
4.5 多灾多难的隐式可选值
隐式可选值行为
4.6 总结
第5章 结构体和类
5.1 值类型
5.2 可变性
5.3 结构体
5.4 写时复制
写时复制(昂贵方式)
写时复制(高效方式)
写时复制的陷阱
5.5 闭包和可变性
5.6 内存
weak引用
unowned引用
5.7 闭包和内存
结构体和类使用实践
5.8 闭包和内存
引用循环
捕获列表
5.9 总结
第6章 函数
6.1 函数的灵活性
函数作为数据
6.2 局部函数和变量捕获
6.3 函数作为代理
Foundation框架的代理
结构体代理
使用函数,而非代理
6.4 inout参数和可变方法
嵌套函数和inout
&不意味inout的情况
6.5 计算属性和下标
延迟存储属性
使用不同参数重载下标
下标进阶
6.6 自动闭包
@escaping标注
6.7 总结
第7章 字符串
7.1 不再固定宽度
字位簇和标准等价
7.2 字符串和集合
字符串与切片
7.3 简单的正则表达式匹配器
7.4 ExpressibleByStringLiteral
7.5 String的内部结构
Character的内部组织结构
7.6 编码单元表示方式
7.7 CustomStringConvertible和CustomDebugStringConvertible
7.8 文本输出流
7.9 字符串性能
7.10 展望
第8章 错误处理
8.1 Result类型
8.2 抛出和捕获
8.3 带有类型的错误
8.4 将错误桥接到Objective-C
8.5 错误和函数参数
Rethrows
8.6 使用defer进行清理
8.7 错误和可选值
8.8 错误链
链结果
8.9 高阶函数和错误
8.10 总结
第9章 泛型
9.1 重载
自由函数的重载
运算符的重载
使用泛型约束进行重载
使用闭包对行为进行参数化
9.2 对集合采用泛型操作
二分查找
泛型二分查找
集合随机排列
SubSequence和泛型算法
重写与优化
9.3 使用泛型进行代码设计
提取共通功能
创建泛型数据类型
9.4 泛型的工作方式
泛型特化
全模块优化
9.5 总结
第10章 协议
10.1 面向协议编程
协议扩展
在协议扩展中重写方法
10.2 协议的两种类型
类型抹消
10.3 带有Self的协议
10.4 协议内幕
性能影响
10.5 总结
第11章 互用性
11.1 实践:封装CommonMark
封装C代码库
封装cmark_node类型
更安全的接口
11.2 低层级类型概览
11.3 函数指针