第一部分 Swift語法篇
第1章 準備起航 2
1.1 本書約定 2
1.1.1 示例代碼約定 2
1.1.2 圖示約定 3
1.1.3 函數和方法簽名約定 5
1.1.4 承接上一行代碼約定 6
1.1.5 代碼行號約定 6
1.2 Swift開發工具 7
1.2.1 Xcode開發工具 7
1.2.2 AppCode開發工具 13
1.3 本章小結 14
1.4 同步練習 14
第2章 第一個Swift程序 15
2.1 使用REPL 15
2.1.1 啓動Swift REPL 15
2.1.2 使用Swift REPL 17
2.2 使用Playground 18
2.2.1 編程利器Playground 18
2.2.2 編寫HelloWorld程序 19
2.3 通過Xcode創建macOS工程 23
2.3.1 創建macOS工程 23
2.3.2 編譯和運行 25
2.4 使用swiftc命令 26
2.4.1 編譯 26
2.4.2 運行 27
2.5 代碼解釋 27
2.6 本章小結 29
2.7 同步練習 29
第3章 Swift語法基礎 30
3.1 標識符和關鍵字 30
3.1.1 標識符 30
3.1.2 關鍵字 31
3.2 常量和變量 33
3.2.1 常量 33
3.2.2 變量 33
3.2.3 使用var還是let 34
3.3 注釋 35
3.4 錶達式 36
3.5 本章小結 37
3.6 同步練習 37
第4章 運算符 39
4.1 算術運算符 39
4.1.1 一元運算符 39
4.1.2 二元運算符 40
4.1.3 算術賦值運算符 41
4.2 關係運算符 42
4.3 邏輯運算符 44
4.4 位運算符 44
4.5 其他運算符 47
4.6 本章小結 47
4.7 同步練習 48
第5章 Swift原生數據類型 50
5.1 Swift數據類型 50
5.2 整型 50
5.3 浮點型 52
5.4 數字錶示方式 52
5.4.1 進製數字錶示 53
5.4.2 指數錶示 53
5.4.3 其他錶示 53
5.5 數字類型之間的轉換 54
5.5.1 整型之間的轉換 54
5.5.2 整型與浮點型之間的轉換 55
5.6 布爾型 55
5.7 元組類型 56
5.8 可選類型 57
5.8.1 可選類型概念 57
5.8.2 可選類型值拆包 58
5.8.3 可選綁定 59
5.9 本章小結 59
5.10 同步練習 59
第6章 Swift簡介 61
6.1 字符 61
6.1.1 Unicode編碼 61
6.1.2 轉義符 62
6.2 創建字符串 63
6.3 可變字符串 64
6.3.1 字符串拼接 64
6.3.2 字符串插入、刪除和替換 65
6.4 字符串比較 66
6.4.1 大小和相等比較 66
6.4.2 前綴和後綴比較 68
6.5 本章小結 68
6.6 同步練習 69
第7章 控製語句 70
7.1 分支語句 70
7.1.1 if語句 70
7.1.2 switch語句 72
7.1.3 guard語句 74
7.2 循環語句 77
7.2.1 while語句 77
7.2.2 repeat-while語句 78
7.2.3 for語句 79
7.3 跳轉語句 80
7.3.1 break語句 80
7.3.2 continue語句 82
7.3.3 fallthrough語句 83
7.4 範圍與區間運算符 85
7.4.1 switch中使用區間運算符 86
7.4.2 for中使用區間運算符 87
7.5 值綁定 88
7.5.1 if中的值綁定 88
7.5.2 guard中的值綁定 89
7.5.3 switch中的值綁定 90
7.6 where語句 91
7.6.1 switch中使用where語句 91
7.6.2 for中使用where語句 92
7.7 本章小結 92
7.8 同步練習 92
第8章 Swift原生集閤類型 97
8.1 Swift中的數組集閤 97
8.1.1 數組聲明和初始化 98
8.1.2 可變數組 99
8.1.3 數組遍曆 100
8.2 Swift中的字典集閤 101
8.2.1 字典聲明與初始化 102
8.2.2 可變字典 103
8.2.3 字典遍曆 104
8.3 Swift中的Set集閤 105
8.3.1 Set聲明和初始化 106
8.3.2 可變Set集閤 107
8.3.3 Set集閤遍曆 108
8.3.4 Set集閤運算 109
8.4 本章小結 110
8.5 同步練習 110
第9章 函數 112
9.1 定義函數 112
9.2 函數參數 113
9.2.1 使用參數標簽 113
9.2.2 省略參數標簽 113
9.2.3 參數默認值 114
9.2.4 可變參數 114
9.2.5 值類型參數的引用傳遞 115
9.3 函數返迴值 116
9.3.1 無返迴值函數 116
9.3.2 多返迴值函數 117
9.4 函數類型 117
9.4.1 作為函數返迴類型使用 118
9.4.2 作為參數類型使用 119
9.5 嵌套函數 120
9.6 本章小結 121
9.7 同步練習 121
第10章 閉包 125
10.1 迴顧嵌套函數 125
10.2 閉包的概念 126
10.3 使用閉包錶達式 127
10.3.1 類型推斷簡化 127
10.3.2 隱藏return關鍵字 128
10.3.3 省略參數名 128
10.3.4 使用閉包返迴值 129
10.4 使用尾隨閉包 130
10.5 捕獲上下文中的變量和常量 131
10.6 本章小結 132
10.7 同步練習 132
第11章 Swift語言中的麵嚮對象特性 135
11.1 麵嚮對象概念和基本特徵 135
11.2 Swift中的麵嚮對象類型 135
11.3 枚舉 136
11.3.1 成員值 136
11.3.2 原始值 138
11.3.3 相關值 140
11.4 結構體與類 141
11.4.1 類和結構體定義 141
11.4.2 再談值類型和引用類型 142
11.4.3 引用類型的比較 144
11.4.4 運算符重載 145
11.5 類型嵌套 146
11.6 可選鏈 147
11.6.1 可選鏈的概念 148
11.6.2 使用問號 (?) 和感嘆號 (!) 150
11.7 訪問限定 151
11.7.1 訪問範圍 151
11.7.2 訪問級彆 152
11.7.3 使用訪問級彆最佳實踐 154
11.8 選擇類還是結構體最佳實踐 157
11.8.1 類和結構體的異同 157
11.8.2 選擇的原則 157
11.9 本章小結 158
11.10 同步練習 159
第12章 屬性與下標 163
12.1 存儲屬性 163
12.1.1 存儲屬性概念 163
12.1.2 延遲存儲屬性 164
12.2 計算屬性 165
12.2.1 計算屬性的概念 165
12.2.2 隻讀計算屬性 167
12.2.3 結構體和枚舉中的計算屬性 168
12.3 屬性觀察者 169
12.4 靜態屬性 171
12.4.1 結構體靜態屬性 173
12.4.2 枚舉靜態屬性 174
12.4.3 類靜態屬性 175
12.5 使用下標 176
12.5.1 下標概念 176
12.5.2 示例:二維數組 176
12.6 本章小結 178
12.7 同步練習 178
第13章 方法 180
13.1 實例方法 180
13.2 可變方法 181
13.3 靜態方法 182
13.3.1 結構體靜態方法 183
13.3.2 枚舉靜態方法 183
13.3.3 類靜態方法 184
13.4 本章小結 184
13.5 同步練習 185
第14章 構造與析構 186
14.1 構造函數 186
14.1.1 默認構造函數 186
14.1.2 構造函數與存儲屬性初始化 187
14.1.3 使用參數標簽 189
14.2 構造函數重載 190
14.2.1 構造函數重載概念 190
14.2.2 結構體構造函數代理 191
14.2.3 類構造函數橫嚮代理 192
14.3 析構函數 194
14.4 本章小結 195
14.5 同步練習 195
第15章 類繼承 197
15.1 從一個示例開始 197
15.2 構造函數繼承 198
15.2.1 構造函數調用規則 198
15.2.2 構造過程安全檢查 200
15.2.3 構造函數繼承 204
15.3 重寫 206
15.3.1 重寫實例屬性 206
15.3.2 重寫靜態屬性 209
15.3.3 重寫實例方法 209
15.3.4 重寫靜態方法 211
15.3.5 下標重寫 211
15.3.6 使用final關鍵字 213
15.4 類型檢查與轉換 214
15.4.1 使用is進行類型檢查 216
15.4.2 使用as、as!和as?進行類型轉換 217
15.4.3 使用AnyObject和Any類型 220
15.5 本章小結 221
15.6 同步練習 221
第16章 擴展 223
16.1 “輕量級”繼承機製 223
16.2 聲明擴展 223
16.3 擴展計算屬性 224
16.4 擴展方法 226
16.5 擴展構造函數 227
16.5.1 值類型擴展構造函數 227
16.5.2 引用類型擴展構造函數 228
16.6 擴展下標 229
16.7 本章小結 230
16.8 同步練習 230
第17章 協議 231
17.1 協議概念 231
17.2 協議定義和遵從 232
17.3 協議方法 232
17.3.1 協議實例方法 232
17.3.2 協議靜態方法 233
17.3.3 協議可變方法 234
17.4 協議屬性 236
17.4.1 協議實例屬性 236
17.4.2 協議靜態屬性 237
17.5 麵嚮協議編程 238
17.5.1 協議類型 238
17.5.2 協議的繼承 240
17.5.3 協議擴展 242
17.5.4 協議的閤成 243
17.5.5 擴展中遵從協議 244
17.6 麵嚮協議編程示例:錶視圖中使用擴展協議 245
17.7 本章小結 247
17.8 同步練習 247
第18章 泛型 249
18.1 一個問題的思考 249
18.2 泛型函數 249
18.2.1 使用泛型函數 250
18.2.2 多類型參數 251
18.3 泛型類型 251
18.4 泛型擴展 253
18.5 本章小結 254
18.6 同步練習 254
第19章 Swift編碼規範 255
19.1 命名規範 255
19.2 注釋規範 257
19.2.1 文件注釋 257
19.2.2 文檔注釋 258
19.2.3 代碼注釋 259
19.2.4 使用地標注釋 260
19.3 聲明 262
19.3.1 變量或常量聲明 262
19.3.2 屬性聲明 263
19.4 代碼排版 264
19.4.1 空行 264
19.4.2 空格 265
19.4.3 斷行 266
19.4.4 縮進 268
19.5 本章小結 269
19.6 同步練習 269
第二部分 進階篇
第20章 Swift內存管理 272
20.1 Swift內存管理概述 272
20.1.1 引用計數 273
20.1.2 示例:Swift自動引用計數 273
20.2 強引用循環 275
20.3 打破強引用循環 279
20.3.1 弱引用 279
20.3.2 無主引用 282
20.4 閉包中的強引用循環 285
20.4.1 一個閉包中的強引用循環示例 285
20.4.2 解決閉包強引用循環 286
20.5 本章小結 288
20.6 同步練習 288
第21章 錯誤處理 290
21.1 Cocoa錯誤處理模式 290
21.2 do-try-catch錯誤處理模式 291
21.2.1 捕獲錯誤 292
21.2.2 錯誤類型 292
21.2.3 聲明拋齣錯誤 293
21.2.4 在函數或方法中拋齣錯誤 293
21.2.5 try?和try!的使用區彆 294
21.3 案例:MyNotes應用數據持久層實現 295
21.3.1 MyNotes應用介紹 296
21.3.2 MyNotes應用數據持久層設計 296
21.3.3 實現Note實體類 297
21.3.4 NoteDAO代碼實現 297
21.3.5 使用defer語句釋放資源 298
21.3.6 測試示例 299
21.4 本章小結 300
21.5 同步練習 301
第22章 Foundation框架 302
22.1 數字類NSNumber 302
22.1.1 獲得NSNumber對象 302
22.1.2 比較NSNumber對象 304
22.1.3 數字格式化 305
22.1.4 NSNumber與Swift原生數字類型之間的橋接 307
22.2 字符串類 307
22.2.1 NSString類 308
22.2.2 NSMutableString類 310
22.2.3 NSString與String之間的橋接 312
22.3 數組類 313
22.3.1 NSArray類 313
22.3.2 NSMutableArray類 314
22.3.3 NSArray與Swift原生數組之間的橋接 315
22.4 字典類 316
22.4.1 NSDictionary類 316
22.4.2 NSMutableDictionary類 317
22.4.3 NSDictionary與Swift原生字典之間的橋接 318
22.5 NSSet集閤類 319
22.5.1 NSSet類 320
22.5.2 NSMutableSet類 321
22.5.3 NSSet與Swift原生Set之間的橋接 322
22.6 文件管理 322
22.6.1 訪問目錄 322
22.6.2 目錄操作 323
22.6.3 文件操作 324
22.7 字節緩存 327
22.7.1 訪問字節緩存 327
22.7.2 示例:Base64解碼與編碼 330
22.8 日期與時間 332
22.8.1 NSDate和Date 332
22.8.2 日期時間格式化 334
22.8.3 NSCalendar、Calendar、NSDateComponents和DateComponents 335
22.8.4 示例:時區轉換 337
22.9 使用謂詞NSPredicate過濾數據 339
22.9.1 一個過濾員工花名冊的示例 339
22.9.2 使用謂詞NSPredicate 341
22.9.3 NSPrdicate與集閤 342
22.9.4 格式說明符 343
22.9.5 運算符 344
22.10 使用正則錶達式 347
22.10.1 在NSPredicate中使用正則錶達式 347
22.10.2 使用NSRegularExpression 348
22.10.3 示例:日期格式轉換 350
22.11 本章小結 352
第三部分 混閤編程篇
第23章 Swift與Objective-C混閤編程 354
23.1 選擇語言 354
23.2 文件擴展名 354
23.3 Swift與Objective-C API映射 355
23.3.1 構造函數映射 355
23.3.2 方法名映射 357
23.4 同一應用目標中的混閤編程 360
23.4.1 什麼是目標 360
23.4.2 Swift調用Objective-C 363
23.4.3 Objective-C調用Swift 366
23.5 同一框架目標中的混閤編程 370
23.5.1 鏈接庫和框架 370
23.5.2 Swift調用Objective-C 372
23.5.3 測試框架目標 376
23.5.4 Objective-C調用Swift 380
23.6 本章小結 383
第24章 Swift與C/C++混閤編程 384
24.1 數據類型映射 384
24.1.1 C語言基本數據類型 384
24.1.2 C語言指針類型 385
24.2 應用目標中的混閤編程 392
24.2.1 Swift調用C API 392
24.2.2 Swift調用C++ API 393
24.3 框架目標中的混閤編程 399
24.3.1 同一框架目標中Swift調用C或C++ API 399
24.3.2 Swift調用第三方庫中的C或C++ API 402
24.4 案例:用SQLite嵌入式數據庫實現MyNotes數據持久層 405
24.4.1 Note實體類代碼 405
24.4.2 創建錶 405
24.4.3 插入數據 407
24.4.4 查詢數據 409
24.4.5 應用沙箱目錄 411
24.4.6 錶示層開發 412
24.5 本章小結 414
第四部分 遊戲篇
第25章 SpriteKit遊戲引擎 416
25.1 移動平颱遊戲引擎介紹 416
25.2 第一個SpriteKit遊戲 416
25.2.1 創建工程 416
25.2.2 工程剖析 419
25.3 一切都是節點 426
25.3.1 節點“傢族” 426
25.3.2 節點樹 427
25.3.3 節點中重要的方法 428
25.3.4 節點中重要的屬性 428
25.4 精靈 429
25.4.1 精靈類SKSpriteNode 429
25.4.2 案例:沙漠英雄場景 431
25.4.3 使用紋理圖集性能優化 438
25.5 場景切換 441
25.5.1 場景切換方法 441
25.5.2 場景過渡動畫 442
25.5.3 案例:沙漠英雄場景切換 443
25.6 動作 447
25.6.1 常用動作 447
25.6.2 組閤動作 449
25.6.3 案例:幀動畫實現 455
25.7 粒子係統 458
25.7.1 粒子係統屬性 459
25.7.2 內置粒子係統模闆 460
25.8 遊戲音樂與音效 464
25.8.1 音頻文件介紹 464
25.8.2 macOS和iOS平颱音頻優化 465
25.8.3 背景音樂 466
28.8.4 3D音效 467
25.9 物理引擎 468
25.9.1 物理引擎核心概念 469
25.9.2 物理引擎中的物體 469
25.9.3 接觸與碰撞 471
25.9.4 案例:食品的接觸與碰撞 472
25.10 本章小結 475
第五部分 項目實戰篇
第26章 遊戲App實戰——迷失航綫 478
26.1 《迷失航綫》遊戲分析與設計 478
26.1.1 《迷失航綫》故事背景 478
26.1.2 需求分析 478
26.1.3 原型設計 479
26.1.4 遊戲腳本 480
26.2 任務1:遊戲工程的創建與初始化 481
26.2.1 迭代1.1:創建工程 481
26.2.2 迭代1.2:自定義類型維護 481
26.2.3 迭代1.3:添加資源文件 484
26.2.4 迭代1.4:添加粒子係統 486
26.3 任務2:創建Loading場景 486
26.3.1 迭代2.1:設計場景 486
26.3.2 迭代2.2:Loading動畫 487
26.3.3 迭代2.3:預處理加載紋理 488
26.4 任務3:創建Home場景 489
26.4.1 迭代3.1:設計場景 489
26.4.2 迭代3.2:實現代碼 490
26.5 任務4:創建設置場景 493
26.5.1 迭代4.1:設計場景 493
26.5.2 迭代4.2:實現代碼 494
26.6 任務5:創建幫助場景 497
26.6.1 迭代5.1:設計場景 498
26.6.2 迭代5.2:實現代碼 498
26.7 任務6:實現遊戲場景 499
26.7.1 迭代6.1:設計場景 500
26.7.2 迭代6.2:創建敵人精靈 502
26.7.3 迭代6.3:創建玩傢飛機精靈 506
26.7.4 迭代6.4:創建子彈精靈 507
26.7.5 迭代6.5:初始化遊戲場景 508
26.7.6 迭代6.6:玩傢移動飛機 512
26.7.7 迭代6.7:遊戲循環與任務調度 513
26.7.8 迭代6.8:遊戲場景菜單實現 514
26.7.9 迭代6.9:玩傢飛機發射子彈 516
26.7.10 迭代6.10:子彈與敵人的碰撞檢測 517
26.7.11 迭代6.11:玩傢飛機與敵人的碰撞檢測 520
26.8 任務7:遊戲結束場景 521
26.8.1 迭代7.1:設計場景 522
26.8.2 迭代7.2:實現代碼 523
26.9 還有“最後一公裏” 524
26.9.1 添加圖標 524
26.9.2 調整Identity和Deployment Info屬性 526
29.9.3 調整程序代碼 527
26.10 本章小結 528
· · · · · · (
收起)