內容提要
《Swift進階》涵蓋了關於Swift程式設計的進階話題。如果你已經通讀Apple 的《Swift編程指南》,並且想要深入探索關於這門語言的更多內容,那么這《Swift進階》正適合你!
Swift非常適合用來進行系統編程,同時它也能被用於書寫高層級的代碼。我們在書中既會研究像泛型、協定這樣的高層級抽象的內容,也會涉足像封裝C 代碼以及字元串內部實現這樣的低層級話題。《Swift進階》將幫助你進一步完善知識體系,帶領你從Swift的入門或中級水平邁入Swift高級開發者的大門。
目錄
第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