內容簡介
O'Reilly Media通過圖書、雜誌、線上服務、調查研究和會議等方式傳播創新知識。自1978年開始,O'Reilly一直都是前沿發展的見證者和推動者。超級極客們正在開創著未來,而我們關注真正重要的技術趨勢——通過放大那些“細微的信號”來刺激社會對新科技的套用。作為技術社區中活躍的參與者,O'Reilly的發展充滿了對創新的倡導、創造和發揚光大。
O'Reilly為軟體開發人員帶來革命性的“動物書”;創建第一個商業網站(GNN);組織了影響深遠的開放原始碼峰會,以至於開源軟體運動以此命名;創立了Make雜誌,從而成為DIY革命的主要先鋒;公司一如既往地通過多種形式締結信息與人的紐帶。O'Reilly的會議和峰會集聚了眾多超級極客和高瞻遠矚的商業領袖,共同描繪出開創新產業的革命性思想。作為技術人士獲取信息的選擇,O'Reilly現在還將先鋒專家的知識傳遞給普通的計算機用戶。無論是通過書籍出版,線上服務或者面授課程,每一項O'Reilly的產品都反映了公司不可動搖的理念——信息是激發創新的力量。
目錄
前言 1
第一部分 語言
第1章 Swift架構縱覽 11 1.1 基礎 11
1.2 萬物皆對象 12
1.3 對象類型的3種風格 14
1.4 變數 14
1.5 函式 15
1.6 Swift檔案的結構 16
1.7 作用域與生命周期 19
1.8 對象成員 20
1.9 命名空間 20
1.10 模組 21
1.11 實例 22
1.12 為何使用實例 24
1.13 self 26
1.14 隱私 27
1.15 設計 29
1.15.1 對象類型與API 29
1.15.2 實例創建、作用域與生命周期 31
1.15.3 小結 32
第2章 函式 34
2.1 函式參數與返回值 34
2.1.1 Void返回類型與參數 37
2.1.2 函式簽名 38
2.2 外部參數名 38
2.3 重載 41
2.4 默認參數值 42
2.5 可變參數 43
2.6 可忽略參數 44
2.7 可修改參數 44
2.8 函式中的函式 48
2.9 遞歸 49
2.10 將函式作為值 50
2.11 匿名函式 53
2.12 定義與調用 57
2.13 閉包 58
2.13.1 閉包是如何改善代碼的 59
2.13.2 返回函式的函式 61
2.13.3 使用閉包設定捕獲變數 64
2.13.4 使用閉包保存捕獲的環境 64
2.14 柯里化函式 66
第3章 變數與簡單類型 68
3.1 變數作用域與生命周期 68
3.2 變數聲明 69
3.3 計算初始化器 72
3.4 計算變數 73
3.5 setter觀察者 76
3.6 延遲初始化 77
3.7 內建簡單類型 79
3.7.1 Bool 80
3.7.2 數字 81
3.7.3 String 88
3.7.4 Character 93
3.7.5 Range 96
3.7.6 元組 98
3.7.7 Optional 102
第4章 對象類型 114
4.1 對象類型聲明與特性 114
4.1.1 初始化器 115
4.1.2 屬性 122
4.1.3 方法 125
4.1.4 下標 127
4.1.5 嵌套對象類型 128
4.1.6 實例引用 129
4.2 枚舉 131
4.2.1 帶有固定值的Case 132
4.2.2 帶有類型值的Case 133
4.2.3 枚舉初始化器 134
4.2.4 枚舉屬性 136
4.2.5 枚舉方法 137
4.2.6 為何使用枚舉 138
4.3 結構體 139
4.3.1 結構體初始化器、屬性與方法 139
4.3.2 將結構體作為命名空間 140
4.4 類 141
4.4.1 值類型與引用類型 142
4.4.2 子類與父類 146
4.4.3 類初始化器 151
4.4.4 類析構器 159
4.4.5 類屬性與方法 159
4.5 多態 161
4.6 類型轉換 164
4.7 類型引用 168
4.8 協定 172
4.8.1 為何使用協定 174
4.8.2 協定類型測試與轉換 176
4.8.3 聲明協定 177
4.8.4 可選協定成員 178
4.8.5 類協定 180
4.8.6 隱式必備初始化器 180
4.8.7 字面值轉換 182
4.9 泛型 183
4.9.1 泛型聲明 185
4.9.2 類型約束 186
4.9.3 顯式特化 189
4.9.4 關聯類型鏈 190
4.9.5 附加約束 192
4.10 擴展 196
4.10.1 擴展對象類型 196
4.10.2 擴展協定 199
4.10.3 擴展泛型 202
4.11 保護類型 203
4.11.1 AnyObject 203
4.11.2 AnyClass 206
4.11.3 Any 207
4.12 集合類型 208
4.12.1 Array 208
4.12.2 Dictionary 222
4.12.3 Set 227
第5章 流程控制與其他 232
5.1 流程控制 232
5.1.1 分支 233
5.1.2 循環 245
5.1.3 跳轉 250
5.2 運算符 261
5.3 隱私性 264
5.3.1 Private聲明 265
5.3.2 Public聲明 267
5.3.3 隱私性規則 267
5.4 內省 267
5.5 記憶體管理 269
5.5.1 弱引用 270
5.5.2 無主引用 272
5.5.3 匿名函式中的弱引用與無主引用 273
5.5.4 協定類型引用的記憶體管理 275
第二部分 IDE
第6章 Xcode項目剖析 279
6.1 新建項目 279
6.2 項目視窗 281
6.2.1 導航窗格 282
6.2.2 輔助窗格 288
6.2.3 編輯器 289
6.3 項目檔案及其依賴 291
6.4 目標 293
6.4.1 構建階段 294
6.4.2 構建設定 296
6.4.3 配置 297
6.4.4 方案與目標 298
6.5 從項目到運行套用 300
6.5.1 構建設定 303
6.5.2 屬性列表設定 303
6.5.3 nib檔案 304
6.5.4 其他資源 305
6.5.5 代碼檔案與套用啟動過程 307
6.5.6 框架與SDK 312
6.6 對項目內容進行重命名 314
第7章 nib管理 316
7.1 nib編輯器界面概覽 317
7.1.1 文檔大綱 318
7.1.2 畫布 321
7.1.3 查看器與庫 323
7.2 nib載入 324
7.2.1 何時載入nib 325
7.2.2 手工載入nib 326
7.3 連線 328
7.3.1 插座變數 328
7.3.2 nib擁有者 330
7.3.3 自動配置nib 333
7.3.4 誤配置的插座變數 333
7.3.5 刪除插座變數 335
7.3.6 創建插座變數的其他方式 335
7.3.7 插座變數集合 338
7.3.8 動作連線 339
7.3.9 創建動作的其他方式 340
7.3.10 誤配置的動作 342
7.3.11 nib之間的連線——不行! 342
7.4 nib實例的其他配置 343
第8章 文檔 346
8.1 文檔視窗 346
8.2 類文檔頁面 349
8.3 示例代碼 351
8.4 快速幫助 352
8.5 符號 353
8.6 頭檔案 354
8.7 網際網路資源 355
第9章 項目的生命周期 356
9.1 設備架構與條件代碼 356
9.1.1 向後兼容 357
9.1.2 設備類型 359
9.2 版本控制 360
9.3 編輯與代碼導航 362
9.3.1 自動補令 363
9.3.2 代碼片段 364
9.3.3 Fix-it與實時語法檢查 365
9.3.4 導航 366
9.3.5 查找 368
9.4 在模擬器中運行 369
9.5 調試 370
9.5.1 原始調試 370
9.5.2 Xcode調試器 372
9.6 測試 378
9.7 清理 383
9.8 在設備中運行 384
9.8.1 在沒有開發者計畫成員資格的情況下運行 386
9.8.2 獲取開發者計畫成員資格 387
9.8.3 獲取證書 387
9.8.4 獲取開發配置檔案 389
9.8.5 運行套用 390
9.8.6 配置檔案與設備管理 390
9.9 分析 391
9.9.1 儀錶盤 391
9.9.2 Instruments 392
9.10 本地化 394
9.10.1 本地化Info.plist 396
9.10.2 本地化nib檔案 398
9.10.3 本地化代碼字元串 399
9.10.4 使用XML檔案進行本地化 401
9.11 歸檔與發布 403
9.12 Ad Hoc發布 405
9.13 最後的準備 406
9.13.1 套用圖示 407
9.13.2 其他圖示 408
9.13.3 啟動圖片 408
9.13.4 螢幕截圖與視頻預覽 409
9.13.5 屬性列表設定 410
9.14 向App Store提交套用 411
第三部分 Cocoa
第10章 Cocoa類 417
10.1 子類化 417
10.2 類別與擴展 420
10.2.1 Swift如何使用擴展 420
10.2.2 你應該如何使用擴展 421
10.2.3 Cocoa如何使用類別 421
10.3 協定 423
10.3.1 非正式協定 425
10.3.2 可選方法 425
10.4 Foundation類精講 427
10.4.1 常用的結構體與常量 427
10.4.2 NSString及相關類 428
10.4.3 NSDate及相關類 431
10.4.4 NSNumber 433
10.4.5 NSValue 434
10.4.6 NSData 435
10.4.7 相等與比較 435
10.4.8 NSIndexSet 437
10.4.9 NSArray與NSMutableArray 438
10.4.10 NSDictionary與NSMutableDictionary 440
10.4.11 NSSet及相關類 440
10.4.12 NSNull 442
10.4.13 不變與可變 442
10.4.14 屬性列表 443
10.5 訪問器、屬性與鍵值編碼 443
10.5.1 Swift訪問器 445
10.5.2 鍵值編碼 446
10.5.3 鍵值編碼的使用 447
10.5.4 KVC與插座變數 448
10.5.5 鍵路徑 449
10.5.6 數組訪問器 450
10.6 NSObject揭秘 450
第11章 Cocoa事件 453
11.1 為何使用事件 453
11.2 子類化 454
11.3 通知 455
11.3.1 接收通知 456
11.3.2 取消註冊 458
11.3.3 發布通知 459
11.3.4 NSTimer 460
11.4 委託 461
11.4.1 Cocoa委託 461
11.4.2 實現委託 463
11.5 數據源 465
11.6 動作 465
11.7 回響器鏈 468
11.7.1 推遲職責 469
11.7.2 Nil-Targeted動作 470
11.8 鍵值觀測 471
11.9 事件泥潭 475
11.10 延遲執行 477
第12章 記憶體管理 480
12.1 Cocoa記憶體管理的原理 480
12.2 Cocoa記憶體管理的原則 481
12.3 ARC及其作用 482
12.4 Cocoa對象管理記憶體的方式 483
12.5 自動釋放池 484
12.6 實例屬性的記憶體管理 486
12.7 保持循環與弱引用 487
12.8 值得注意的記憶體管理情況 488
12.9 nib載入與記憶體管理 492
12.10 CFTypeRefs的記憶體管理 493
12.11 屬性的記憶體管理策略 495
12.12 調試記憶體管理的錯誤 497
第13章 對象間通信 499
13.1 實例化可見性 500
13.2 關係可見性 502
13.3 全局可見性 503
13.4 通知與KVO 504
13.5 模型-視圖-控制器 505
附錄A C、Objective-C與Swift 507