《Swift进阶》PDF下载

  • 购买积分:11 如何计算积分?
  • 作  者:克里斯·安道夫(Chris Eidhof)
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2017
  • ISBN:9787121312007
  • 页数:290 页
图书介绍:在本书中,我们涵盖了Swift程序设计的一些进阶话题。如果你已经通读Apple的Swift编程指南,并且想要深入探索关于这门语言的更多内容,那么这本书正适合你!Swift非常适合用来进行系统编程,而同时它也能被用于书写高层级的代码。我们在书中既会研究像是泛型、协议这样的高层级抽象的内容,也会涉足像是封装C代码以及字符串内部实现这样的低层级话题。

第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