第1章歡迎使用Swift 11.1代碼遷移 2
1.1.1如何遷移 2
1.1.2遷移課程 3
1.2使用Swift 4
1.2.1編譯應用 4
1.2.2框架和庫 5
1.2.3腳本 6
1.2.4REPL 6
1.2.5Playground 7
1.2.6其他 8
1.3學習Swift 8
1.4小結 9
第2章打印與映射 11
2.1基礎打印 11
2.1.1打印多個條目 12
2.1.2添加條目分隔符 13
2.1.3字符串插值 13
2.1.4控制換行符 14
2.2秘訣:打印自定義目標 16
2.2.1打印字符串 16
2.2.2打印自定義輸出流 17
2.3秘訣:打印和字符串格式化 19
2.3.1Swift和格式說明符 20
2.3.2格式化的局限性 20
2.3.3條件編譯 21
2.4調試打印 22
2.5秘訣:后綴打印 24
2.6快速查找 25
2.6.1QuickLookforCustomTypes 25
2.6.2Playground中的QuickLookforCustomTypes 26
2.6.3PlaygroundQuickLooks 26
2.6.4為Playground創建自定義QuickLook 27
2.6.5內置QuickLook類型 28
2.6.6第三方渲染 29
2.7使用Dump函數 30
2.8構建自定義映射 31
2.8.1遞歸映射 33
2.8.2使用協議一致性構建
基本映射描述 33
2.9添加標題文檔 35
2.9.1構建標題文檔 36
2.9.2Markdown支持 36
2.9.3關鍵字 37
2.9.4特殊的Swift關注點 39
2.9.5為標題文檔添加圖像 40
2.10小結 41
第3章可選類型?! 43
3.1可選類型初步 43
3.2展開可選值(UnwrappingOptionals) 45
3.2.1強制展開 45
3.2.2條件綁定 45
3.2.3條件綁定和類型轉換 46
3.2.4級聯綁定 48
3.2.5guard語句 49
3.2.6可選值的隱式展開 50
3.2.7保護failable初始化器 52
3.2.8可選值和哨兵值 53
3.2.9合并 55
3.2.10可選賦值 55
3.2.11可選模式 56
3.3可選鏈 58
3.3.1選擇器測試和可選鏈 60
3.3.2下標 61
3.4可選映射 61
3.4.1映射和鏈 62
3.4.2使用flatMap過濾nil值 62
3.5非托管包裝器 63
3.6小結 64
第4章閉包和函數 67
4.1創建函數 67
4.1.1參數名 68
4.1.2標簽約定 68
4.1.3方法和函數的命名 70
4.1.4外部和局部參數 71
4.1.5默認參數 71
4.1.6常量和變量參數 73
4.1.7修改參數 74
4.2閉包和函數 75
4.2.1函數類型 75
4.2.2使用元組實參 76
4.2.3使用實參名縮寫 77
4.2.4推斷閉包類型 78
4.2.5參數類型推斷 80
4.2.6聲明類型別名 80
4.2.7嵌套函數 81
4.3元組 83
4.3.1將元組轉換成結構體 84
4.3.2元組返回類型 85
4.4可變參數 86
4.5捕獲值 87
4.6Autoclosure 90
4.7柯里化(Currying) 94
4.7.1柯里化的原因 95
4.7.2構建庫 95
4.7.3局部應用 97
4.7.4柯里化的成本 97
4.7.5柯里化和回調 97
4.7.6柯里化實踐 99
4.8將閉包傳遞給函數參數 100
4.9小結 103
第5章泛型和協議 105
5.1詳述泛型 105
5.1.1協議 106
5.1.2標記 107
5.1.3類型約束 108
5.2采用協議 108
5.2.1聲明協議 109
5.2.2成員聲明 111
5.2.3構建基本協議 113
5.2.4添加協議的默認實現 114
5.2.5可選的協議要求 116
5.2.6Swift原生的可選協議要求 116
5.3構建泛型類型 117
5.4泛型要求 119
5.4.1一致性要求 119
5.4.2秘訣:相同類型要求 120
5.4.3泛型美化 121
5.4.4合法的標記 122
5.4.5匹配別名 123
5.4.6協議別名的默認值 123
5.4.7關聯類型總結 124
5.5擴展泛型類型 125
5.6使用協議類型 126
5.6.1基于協議的集合 126
5.6.2Self要求 126
5.6.3協議對象和Self要求 128
5.7利用協議 129
5.8小結 129
第6章錯誤 131
6.1冷酷無情的失敗 131
6.1.1致命錯誤 132
6.1.2斷言 132
6.1.3先決條件 133
6.1.4中斷和退出 134
6.2優雅地失敗 134
6.2.1ErrorType協議 134
6.2.2在可選項和錯誤處理之間做出選擇 136
6.3Swift的錯誤規則 136
6.3.1規則1:遠離nil哨兵 136
6.3.2規則2:使用throw拋出錯誤 138
6.3.3規則3:使用帶有可見訪問的錯誤類型 139
6.3.4規則4:使用throws來標記所有錯誤參與的方法 139
6.3.5規則5:堅持使用rethrows 140
6.3.6規則6:消耗錯誤是很重要的 141
6.3.7規則7:終止線程的錯誤鏈 141
6.4構建錯誤 143
6.4.1良好的錯誤 144
6.4.2為錯誤命名 144
6.5添加字符串描述 145
6.5.1添加原因 145
6.5.2簡化輸出 146
6.5.3擴展字符串 147
6.5.4類型特定的錯誤 147
6.6獲取上下文 147
6.6.1將字符串置于上下文中研究 148
6.6.2將拋出類型置于上下文中研究 149
6.6.3簡化上下文 151
6.7調用拋出函數 152
6.7.1使用try 152
6.7.2錯誤傳播 153
6.7.3使用try! 154
6.7.4使用try? 155
6.8為try?實現替代方法 156
6.8.1謹慎使用結果 158
6.8.2構建try?的打印版本 158
6.9使用guard和defer 159
6.10小結 160
第7章類型 161
7.1語言概念 161
7.1.1引用類型和值類型 161
7.1.2復制與回寫 163
7.1.3代數數據類型 164
7.1.4其他術語 164
7.2枚舉 165
7.2.1基本枚舉 166
7.2.2使用哈希值來支持區間 166
7.2.3原始值枚舉 168
7.2.4原始值成員和序列 169
7.2.5關聯值 171
7.2.6間接值 172
7.3switch語句 173
7.3.1分支 173
7.3.2中斷 174
7.3.3fallthrough 174
7.3.4復雜的case 176
7.3.5元組 176
7.3.6值綁定的模式匹配 177
7.3.7where子句 177
7.3.8展開可選的枚舉 178
7.4通過類型嵌入值 179
7.5選項集 182
7.5.1重溫NS_OPTIONS 182
7.5.2構建枚舉 183
7.5.3構建選項集 184
7.5.4查看選項 184
7.6類 185
7.6.1優化 186
7.6.2初始化器 186
7.6.3初始化步驟 187
7.6.4指定初始化器和便利初始化器 187
7.6.5初始化器規則 187
7.6.6構建便利初始化器 188
7.6.7可失敗初始化器和拋出初始化器 189
7.6.8析構器 191
7.7屬性觀察器 192
7.8擴展和重寫 194
7.9惰性求值 196
7.9.1惰性序列 196
7.9.2惰性屬性 196
7.10小結 197
第8章雜記 199
8.1聲明標簽 199
8.2自定義運算符 201
8.2.1聲明運算符 201
8.2.2運算符的一致性 202
8.2.3對運算符的取舍進行評估 203
8.3數組的索引 203
8.3.1多索引的數組訪問 204
8.3.2封裝索引 206
8.3.3數組切片 206
8.4泛型下標 207
8.5字符串工具 209
8.5.1重復元素初始化器 209
8.5.2字符串和基數 209
8.5.3字符串區間 211
8.5.4字符串分割 212
8.5.5字符串下標 213
8.5.6與Foundation的互操作 214
8.5.7連接與擴展 214
8.6序列生成器 215
8.7小結 217