Swift進階

Swift進階

《Swift進階》 一書原作者【德】Chris Eidhof(克里斯·安道夫) 【德】Ole Begemann (奧勒·畢格曼) 【德】Airspeed Velocity (空速網站),中文版由王巍譯,電子工業出版社2017年5月出版

內容提要

《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

相關詞條

相關搜尋

熱門詞條

聯絡我們