第一部分 Swift語法篇
第1章 準備起航 2
1.1 本書約定 2
1.1.1 示例代碼約定 2
1.1.2 圖示約定 3
1.1.3 函數和方法簽名約定 4
1.1.4 承接上一行代碼約定 5
1.1.5 代碼行號約定 5
1.2 Swift開發工具 6
1.2.1 Xcode開發工具 6
1.2.2 AppCode開發工具 12
1.3 本章小結 13
1.4 同步練習 13
第2章 第一個Swift程序 14
2.1 使用REPL 14
2.1.1 啓動Swift REPL 14
2.1.2 使用Swift REPL 15
2.2 使用Playground 16
2.2.1 編程利器Playground 16
2.2.2 編寫HelloWorld程序 18
2.3 使用Web 網站 21
2.4 通過Xcode創建OS X工程 22
2.4.1 創建OS X工程 22
2.4.2 編譯和運行 23
2.5 通過AppCode創建OS X工程 24
2.5.1 創建OS X工程 24
2.5.2 編譯和運行 25
2.6 使用swiftc命令 27
2.6.1 編譯 27
2.6.2 運行 28
2.7 代碼解釋 28
2.8 在Linux下編譯和運行Swift程序 29
2.9 本章小結 32
2.10 同步練習 32
第3章 Swift語法基礎 33
3.1 標識符和關鍵字 33
3.1.1 標識符 33
3.1.2 關鍵字 34
3.2 常量和變量 35
3.2.1 常量 35
3.2.2 變量 36
3.2.3 使用var還是let 36
3.3 注釋 37
3.4 錶達式 38
3.5 本章小結 39
3.6 同步練習 39
第4章 運算符 41
4.1 算術運算符 41
4.1.1 一元運算符 41
4.1.2 二元運算符 41
4.1.3 算術賦值運算符 43
4.2 關係運算符 43
4.3 邏輯運算符 45
4.4 位運算符 46
4.5 其他運算符 47
4.6 本章小結 48
4.7 同步練習 48
第5章 Swift原生數據類型 50
5.1 Swift數據類型 50
5.2 整型 50
5.3 浮點型 51
5.4 數字錶示方式 52
5.4.1 進製數字錶示 52
5.4.2 指數錶示 52
5.4.3 其他錶示 53
5.5 數字類型之間的轉換 53
5.5.1 整型之間的轉換 53
5.5.2 整型與浮點型之間的轉換 54
5.6 布爾型 54
5.7 元組類型 54
5.8 可選類型 56
5.8.1 可選類型概念 56
5.8.2 可選類型值拆包 56
5.8.3 可選綁定 57
5.9 本章小結 57
5.10 同步練習 57
第6章 Swift原生字符串 59
6.1 字符 59
6.1.1 Unicode編碼 59
6.1.2 轉義符 60
6.2 創建字符串 61
6.3 可變字符串 61
6.3.1 字符串拼接 61
6.3.2 字符串插入、刪除和替換 62
6.4 字符串比較 63
6.4.1 大小和相等比較 63
6.4.2 前綴和後綴比較 64
6.5 本章小結 65
6.6 同步練習 65
第7章 控製語句 66
7.1 分支語句 66
7.1.1 if語句 66
7.1.2 switch語句 68
7.1.3 guard語句 69
7.2 循環語句 71
7.2.1 while語句 71
7.2.2 repeat-while語句 73
7.2.3 for語句 74
7.2.4 for-in語句 75
7.3 跳轉語句 76
7.3.1 break語句 76
7.3.2 continue語句 78
7.3.3 fallthrough語句 79
7.4 範圍與區間運算符 81
7.4.1 switch中使用區間運算符 81
7.4.2 for-in中使用區間運算符 82
7.5 值綁定 83
7.5.1 if中的值綁定 83
7.5.2 guard中的值綁定 84
7.5.3 switch中的值綁定 85
7.6 where語句 85
7.6.1 switch中使用where語句 86
7.6.2 for-in中使用where語句 86
7.6.3 guard中使用where語句 86
7.7 本章小結 87
7.8 同步練習 87
第8章 Swift原生集閤類型 91
8.1 Swift中的數組集閤 91
8.1.1 數組聲明和初始化 92
8.1.2 可變數組 93
8.1.3 數組遍曆 94
8.2 Swift中的字典集閤 94
8.2.1 字典聲明與初始化 95
8.2.2 可變字典 96
8.2.3 字典遍曆 97
8.3 Swift中的Set集閤 98
8.3.1 Set聲明和初始化 98
8.3.2 可變Set集閤 99
8.3.3 Set集閤遍曆 100
8.3.4 Set集閤運算 101
8.4 本章小結 102
8.5 同步練習 102
第9章 函數 104
9.1 使用函數 104
9.2 傳遞參數 105
9.2.1 使用外部參數名 105
9.2.2 省略外部參數名 105
9.2.3 參數默認值 106
9.2.4 可變參數 106
9.2.5 參數的傳遞引用 107
9.3 函數返迴值 107
9.3.1 無返迴值函數 107
9.3.2 多返迴值函數 108
9.4 函數類型 108
9.4.1 作為函數返迴類型使用 109
9.4.2 作為參數類型使用 110
9.5 嵌套函數 111
9.6 本章小結 112
9.7 同步練習 112
第10章 閉包 115
10.1 迴顧嵌套函數 115
10.2 閉包的概念 115
10.3 使用閉包錶達式 116
10.3.1 類型推斷簡化 117
10.3.2 隱藏return關鍵字 117
10.3.3 省略參數名 118
10.3.4 使用閉包返迴值 118
10.4 使用尾隨閉包 119
10.5 捕獲上下文中的變量和常量 120
10.6 本章小結 121
10.7 同步練習 121
第11章 Swift語言中的麵嚮對象特性123
11.1 麵嚮對象概念和基本特徵 123
11.2 Swift中的麵嚮對象類型 123
11.3 枚舉 124
11.3.1 成員值 124
11.3.2 原始值 126
11.3.3 相關值 127
11.4 結構體與類 128
11.4.1 類和結構體定義 128
11.4.2 再談值類型和引用類型 129
11.4.3 引用類型的比較 131
11.4.4 運算符重載 132
11.5 類型嵌套 133
11.6 可選鏈 134
11.6.1 可選鏈的概念 134
11.6.2 使用問號(?)和感嘆號(!) 136
11.7 訪問限定 136
11.7.1 訪問範圍 137
11.7.2 訪問級彆 138
11.7.3 使用訪問級彆最佳實踐 138
11.8 選擇類還是結構體最佳實踐 140
11.8.1 類和結構體的異同 141
11.8.2 選擇的原則 141
11.9 本章小結 142
11.10 同步練習 142
第12章 屬性與下標 146
12.1 存儲屬性 146
12.1.1 存儲屬性概念 146
12.1.2 延遲存儲屬性 147
12.2 計算屬性 148
12.2.1 計算屬性的概念 148
12.2.2 隻讀計算屬性 150
12.2.3 結構體和枚舉中的計算屬性 150
12.3 屬性觀察者 151
12.4 靜態屬性 153
12.4.1 結構體靜態屬性 154
12.4.2 枚舉靜態屬性 155
12.4.3 類靜態屬性 156
12.5 使用下標 156
12.5.1 下標概念 157
12.5.2 示例:二維數組 157
12.6 本章小結 159
12.7 同步練習 159
第13章 方法 160
13.1 實例方法 160
13.1.1 使用規範的命名 160
13.1.2 結構體和枚舉方法變異 163
13.2 靜態方法 165
13.2.1 結構體靜態方法 165
13.2.2 枚舉靜態方法 166
13.2.3 類靜態方法 166
13.3 本章小結 167
13.4 同步練習 167
第14章 構造與析構 168
14.1 構造函數 168
14.1.1 默認構造函數 168
14.1.2 構造函數與存儲屬性初始化169
14.1.3 使用外部參數名 170
14.2 構造函數重載 172
14.2.1 構造函數重載概念 172
14.2.2 構造函數代理 172
14.2.3 類構造函數橫嚮代理 173
14.3 析構函數 174
14.4 本章小結 176
14.5 同步練習 176
第15章 類繼承 178
15.1 從一個示例開始 178
15.2 構造函數繼承 179
15.2.1 構造函數調用規則 179
15.2.2 構造過程安全檢查 180
15.2.3 構造函數繼承 184
15.3 重寫 186
15.3.1 重寫實例屬性 186
15.3.2 重寫靜態屬性 188
15.3.3 重寫實例方法 189
15.3.4 重寫靜態方法 190
15.3.5 下標重寫 190
15.3.6 使用final關鍵字 191
15.4 類型檢查與轉換 193
15.4.1 使用is進行類型檢查 194
15.4.2 使用as、as!和as?進行類型轉換 195
15.4.3 使用Any和AnyObject類型.197
15.5 本章小結 198
15.6 同步練習 198
第16章 擴展 200
16.1 “輕量級”繼承機製 200
16.2 聲明擴展 200
16.3 擴展計算屬性 201
16.4 擴展方法 202
16.5 擴展構造函數 203
16.5.1 值類型擴展構造函數 203
16.5.2 引用類型擴展構造函數 204
16.6 擴展下標 204
16.7 本章小結 205
16.8 同步練習 205
第17章 協議 206
17.1 協議概念 206
17.2 協議 206
17.3 協議方法 207
17.3.1 協議實例方法 207
17.3.2 協議靜態方法 208
17.3.3 協議變異方法 208
17.4 協議屬性 210
17.4.1 協議實例屬性 210
17.4.2 協議靜態屬性 211
17.5 麵嚮協議編程 211
17.5.1 協議類型 212
17.5.2 協議的繼承 214
17.5.3 協議擴展 215
17.5.4 協議的閤成 216
17.5.5 擴展中遵從協議 217
17.5.6 麵嚮協議編程示例:錶視圖中使用擴展協議 217
17.6 本章小結 220
17.7 同步練習 220
第18章 泛型 222
18.1 一個問題的思考 222
18.2 泛型函數 222
18.2.1 使用泛型函數 223
18.2.2 多類型參數 223
18.3 泛型類型 223
18.4 泛型擴展 225
18.5 本章小結 226
18.6 同步練習 226
第19章 Swift內存管理 227
19.1 Swift內存管理概述 227
19.1.1 引用計數 227
19.1.2 示例:Swift自動引用計數 228
19.2 強引用循環 229
19.3 打破強引用循環 233
19.3.1 弱引用 233
19.3.2 無主引用 236
19.4 閉包中的強引用循環 238
19.4.1 一個閉包中的強引用循環示例 238
19.4.2 解決閉包強引用循環 239
19.5 本章小結 241
19.6 同步練習 241
第20章 錯誤處理 243
20.1 Cocoa錯誤處理模式 243
20.2 do-try-catch錯誤處理模式 244
20.2.1 捕獲錯誤 244
20.2.2 錯誤類型 244
20.2.3 聲明拋齣錯誤 245
20.2.4 在函數或方法中拋齣錯誤 245
20.2.5 try?和try!的使用區彆 246
20.3 示例:MyNotes應用數據持久層實現 247
20.3.1 MyNotes應用介紹 247
20.3.2 MyNotes應用數據持久層設計 248
20.3.3 實現Note實體類 248
20.3.4 NoteDAO代碼實現 249
20.3.5 使用defer語句釋放資源 250
20.3.6 測試示例 251
20.4 本章小結 252
20.5 同步練習 252
第21章 Swift編碼規範 253
21.1 命名規範 253
21.2 注釋規範 255
21.2.1 文件注釋 255
21.2.2 文檔注釋 255
21.2.3 代碼注釋 256
21.2.4 使用地標注釋 257
21.3 聲明 259
21.3.1 變量或常量聲明 259
21.3.2 屬性聲明 260
21.4 代碼排版 260
21.4.1 空行 260
21.4.2 空格 261
21.4.3 斷行 262
21.4.4 縮進 263
21.5 本章小結 265
第二部分 Cocoa Touch框架編程篇
第22章 Foundation框架 268
22.1 數字類NSNumber 268
22.1.1 獲得NSNumber對象 268
22.1.2 比較NSNumber對象 270
22.1.3 數字格式化 271
22.1.4 NSNumber與Swift原生數字類型之間的橋接 272
22.2 字符串類 273
22.2.1 NSString類 273
22.2.2 NSMutableString類 275
22.2.3 NSString與String之間的橋接 277
22.3 數組類 278
22.3.1 NSArray類 278
22.3.2 NSMutableArray類 279
22.3.3 NSArray 與Swift原生數組之間的橋接 280
22.4 字典類 281
22.4.1 NSDictionary類 281
22.4.2 NSMutableDictionary類 282
22.4.3 NSDictionary與Swift原生字典之間的橋接 283
22.5 NSSet集閤類 283
22.5.1 NSSet類 284
22.5.2 NSMutableSet類 284
22.5.3 NSSet與Swift原生Set之間的橋接 285
22.6 文件管理 286
22.6.1 訪問目錄 286
22.6.2 目錄操作 287
22.6.3 文件操作 288
22.7 字節緩存 289
22.7.1 NSData和NSMutableData類.289
22.7.2 示例:Base64解碼與編碼 291
22.8 日期與時間 292
22.8.1 使用NSDate 類 292
22.8.2 日期時間格式化 294
22.8.3 使用NSCalendar和NSDateComponents類 295
22.8.4 示例:時區轉換 296
22.9 使用謂詞NSPredicate過濾數據 297
22.9.1 一個過濾員工花名冊的示例 298
22.9.2 使用謂詞NSPredicate 300
22.9.3 NSPrdicate與集閤 300
22.9.4 格式說明符 301
22.9.5 運算符 302
22.10 使用正則錶達式 304
22.10.1 在NSPredicate中使用正則錶達式 305
22.10.2 使用NSRegularExpression 305
22.10.3 示例:日期格式轉換 307
22.11 本章小結 309
第23章 iOS開發基礎 310
23.1 iOS 介紹 310
23.2 第一個iOS應用:HelloWorld 310
23.2.1 創建工程 311
23.2.2 Xcode中的iOS 工程模闆 316
23.2.3 程序剖析 317
23.3 iOS API 簡介 319
23.4 本章小結 319
第24章 Core Foundation框架 320
24.1 數據類型映射 320
24.2 內存管理 321
24.2.1 Objective-C的MRC內存管理 321
24.2.2 對象所有權 322
24.2.3 內存托管對象 323
24.2.4 內存非托管對象 324
24.3 本章小結 324
第25章 Cocoa Touch設計模式及應用 325
25.1 單例模式 325
25.1.1 問題提齣 325
25.1.2 解決方案 325
25.2 目標與動作 326
25.2.1 問題提齣 326
25.2.2 解決方案 327
25.3 輸齣口 331
25.3.1 問題提齣 331
25.3.2 解決方案 331
25.4 選擇器 334
25.4.1 問題提齣 334
25.4.2 解決方案 334
25.4.3 示例:使用定時器變換視圖背景 335
25.5 委托與數據源 337
25.5.1 問題提齣 337
25.5.2 委托解決方案 339
25.5.3 數據源解決方案 343
25.6 通知機製 346
25.6.1 問題提齣 346
25.6.2 解決方案 346
25.6.3 示例:關閉和打開鍵盤 347
25.7 MVC模式 348
25.7.1 MVC模式概述 348
25.7.2 Cocoa Touch中的MVC模式 349
25.8 響應者鏈與觸摸事件 351
25.8.1 響應者對象與響應鏈 351
25.8.2 觸摸事件 352
25.9 本章小結 357
第26章 UIKit框架 358
26.1 視圖控製器 358
26.1.1 與導航相關的視圖控製器 358
26.1.2 視圖控製器的生命周期 358
26.2 視圖與UIView 360
26.2.1 UIView繼承層次結構 360
26.2.2 視圖分類 362
26.2.3 應用界麵的構建層次 362
26.3 界麵構建技術 363
26.3.1 使用故事闆 363
26.3.2 使用XIB文件 365
26.3.3 使用代碼 368
26.4 開關控件 370
26.5 滑塊控件 371
26.6 分段控件 373
26.7 工具欄 374
26.8 導航欄 376
26.9 錶視圖 379
26.9.1 錶視圖組成 379
26.9.2 單元格組成和樣式 380
26.9.3 示例:純代碼創建簡單錶視圖 381
26.10 本章小結 386
第三部分 混閤編程篇
第27章 Swift與Objective-C混閤編程 388
27.1 選擇語言 388
27.2 文件擴展名 388
27.3 Swift與Objective-C API映射 388
27.3.1 構造函數映射 389
27.3.2 方法名映射 391
27.4 同一應用目標中的混閤編程 393
27.4.1 什麼是目標 394
27.4.2 Swift調用Objective-C 396
27.4.3 Objective-C調用Swift 399
27.5 同一框架目標中的混閤編程 402
27.5.1 鏈接庫和框架 402
27.5.2 Swift調用Objective-C 404
27.5.3 測試框架目標 407
27.5.4 Objective-C調用Swift 410
27.6 本章小結 413
第28章 Swift與C/C++混閤編程 414
28.1 數據類型映射 414
28.1.1 C語言基本數據類型 414
28.1.2 C語言指針類型 415
28.2 應用目標中的混閤編程 419
28.2.1 Swift調用C API 419
28.2.2 Swift調用C++ API 421
28.3 框架目標中的混閤編程 425
28.3.1 同一框架目標中Swift調用C或C++ API 425
28.3.2 Swift調用第三方庫中的C或C++ API 428
28.4 示例:用SQLite嵌入式數據庫實現MyNotes數據持久層 430
28.4.1 Note實體類代碼 430
28.4.2 創建錶 431
28.4.3 插入數據 432
28.4.4 查詢數據 434
28.4.5 應用沙箱目錄 435
28.4.6 錶示層開發 436
28.5 本章小結 440
第四部分 進 階 篇
第29章 程序調試 442
29.1 Xcode調試工具 442
29.1.1 調試功能 442
29.1.2 輸齣窗口 443
29.1.3 變量查看窗口 444
29.2 設置和查看斷點 445
29.2.1 斷點設置 445
29.2.2 管理斷點 446
29.3 使用Xcode中的Instruments工具 447
29.3.1 跟蹤內存使用 447
29.3.2 內存泄漏查找 449
29.4 iOS 真機調試 453
29.4.1 Xcode設置 453
29.4.2 設備設置 455
29.5 本章小結 456
第30章 並發編程 457
30.1 並發相關概念 457
30.1.1 CPU與並發執行 457
30.1.2 進程與綫程 457
30.2 GCD技術 457
30.2.1 GCD概念 458
30.2.2 調度隊列 458
30.3 GCD示例 458
30.3.1 主綫程阻塞問題 458
30.3.2 使用GCD 解決主綫程阻塞 460
30.4 GCD 與單例模式 460
30.5 本章小結 461
第31章 SpriteKit遊戲引擎 462
31.1 移動平颱遊戲引擎介紹 462
31.2 第一個SpriteKit遊戲 462
31.2.1 創建工程 462
31.2.2 工程剖析 465
31.3 一切都是節點 468
31.3.1 節點“傢族” 469
31.3.2 節點樹 469
31.3.3 節點中重要的方法 470
31.3.4 節點中重要的屬性 470
31.4 精靈 471
31.4.1 精靈類SKSpriteNode 471
31.4.2 示例:沙漠英雄場景 473
31.4.3 使用紋理圖集性能優化 478
31.5 場景切換 481
31.5.1 場景切換方法 481
31.5.2 場景過渡動畫 481
31.5.3 示例:沙漠英雄場景切換 481
31.6 動作 484
31.6.1 常用動作 484
31.6.2 組閤動作 487
31.6.3 示例:幀動畫實現 491
31.7 粒子係統 493
31.7.1 粒子係統屬性 494
31.7.2 內置粒子係統模闆 495
31.8 遊戲音樂與音效 499
31.8.1 音頻文件介紹 499
31.8.2 iOS和OS X平颱音頻優化 499
31.8.3 背景音樂 500
31.8.4 3D音效 501
31.9 物理引擎 502
31.9.1 物理引擎核心概念 502
31.9.2 物理引擎中的物體 503
31.9.3 接觸與碰撞 504
31.10 本章小結 507
第五部分 項目實戰篇
第32章 項目實戰:基於分層架構的多版本iPhone計算器應用 510
32.1 應用分析與設計 510
32.1.1 應用概述 510
32.1.2 需求分析 510
32.1.3 原型設計 511
32.2 分層架構設計 511
32.2.1 低耦閤應用架構 511
32.2.2 詳細設計 512
32.2.3 分層架構設計有多種模式 514
32.2.4 選擇語言 514
32.3 基於同一工程同一目標純Swift的實現 515
32.3.1 創建工程 515
32.3.2 業務邏輯層開發 516
32.3.3 錶示層開發 520
32.4 基於同一工程同一目標Swift調用Objective-C的實現 531
32.4.1 在Swift 工程中添加Objective-C類 531
32.4.2 Objective-C實現業務邏輯層 532
32.5 基於同一工程不同目標Swift調用Objective-C的實現 534
32.5.1 添加業務邏輯層目標 535
32.5.2 暴露的頭文件CalcLogic.h 535
32.5.3 修改錶示層 536
32.6 基於同一工作空間不同工程下Swift調用Objective-C的實現 536
32.6.1 創建工作空間 537
32.6.2 暴露頭文件CalcLogic.h 537
32.6.3 修改錶示層 537
32.7 本章小結 537
第33章 遊戲App實戰:《迷失航綫》 538
33.1 《迷失航綫》遊戲分析與設計 538
33.1.1 《迷失航綫》故事背景 538
33.1.2 需求分析 538
33.1.3 原型設計 539
33.1.4 遊戲腳本 540
33.2 任務1:遊戲工程的創建與初始化 540
33.2.1 迭代1.1:創建工程 540
33.2.2 迭代1.2:自定義類型維護 540
33.2.3 迭代1.3:添加資源文件 543
33.3 任務2:創建Loading場景 543
33.3.1 迭代2.1:設計場景 544
33.3.2 迭代2.2:Loading動畫 545
33.3.3 迭代2.3:預處理加載紋理 545
33.4 任務3:創建Home場景 546
33.4.1 迭代3.1:設計場景 546
33.4.2 迭代3.2:實現代碼 547
33.5 任務4:創建設置場景 549
33.5.1 迭代4.1:設計場景 550
33.5.2 迭代4.2:實現代碼 550
33.6 任務5:創建幫助場景 552
33.6.1 迭代5.1:設計場景 553
33.6.2 迭代5.2:實現代碼 553
33.7 任務6:實現遊戲場景 554
33.7.1 迭代6.1:設計場景 555
33.7.2 迭代6.2:創建敵人精靈 556
33.7.3 迭代6.3:創建玩傢飛機精靈 560
33.7.4 迭代6.4:創建子彈精靈 560
33.7.5 迭代6.5:初始化遊戲場景 561
33.7.6 迭代6.6:玩傢移動飛機 565
33.7.7 迭代6.7:遊戲循環與任務調度 566
33.7.8 迭代6.8:遊戲場景菜單實現 566
33.7.9 迭代6.9:玩傢飛機發射子彈 568
33.7.10 迭代6.10:子彈與敵人的碰撞檢測 569
33.7.11 迭代6.11:玩傢飛機與敵人的碰撞檢測 571
33.8 任務7:遊戲結束場景 573
33.8.1 迭代7.1:設計場景 573
33.8.2 迭代7.2:實現代碼 574
33.9 本章小結 575
第34章 《迷失航綫》遊戲上架蘋果App Store 576
34.1 蘋果App Store 576
34.2 還有“最後一公裏” 577
34.2.1 添加圖標 577
34.2.2 添加啓動界麵 579
34.2.3 修改發布産品屬性 581
34.3 為發布進行編譯 582
34.3.1 創建開發者證書 583
34.3.2 創建App ID 587
34.3.3 創建描述文件 589
34.3.4 發布編譯 593
34.4 發布上架 594
34.4.1 創建應用 595
34.4.2 應用定價 597
34.4.3 基本信息輸入 597
34.4.4 上傳應用 601
34.4.5 提交審核 603
34.5 審核不通過的常見原因 604
34.5.1 功能問題 604
34.5.2 用戶界麵問題 604
34.5.3 商業問題 605
34.5.4 不當內容 605
34.5.5 其他問題 605
34.6 本章小結 605
· · · · · · (
收起)