內容簡介
《iOS 8 Swift編程指南》創新性地將語言和框架結合起來介紹。全書分為兩部分:第一部分是Swift語言介紹,共4章;第二部分則是iOS 8特性的介紹,從App開發者的角度闡述Swift語言在新SDK上的實際套用。本書在介紹iOS 8每個特性的過程中,配以豐富的Swift代碼案例,以此讓讀者在學習iOS 8的同時,積累大量的 Swift 編碼經驗。
內容提要
《iOS 8 Swift編程指南》創新性地將語言和框架結合起來介紹。全書分為兩部分:第一部分是 Swift 語言介紹,共4章;第二部分則是iOS 8特性的介紹,從App開發者的角度闡述Swift語言在新SDK上的實際套用。本書在介紹iOS 8每個特性的過程中,配以豐富的Swift代碼案例,以此讓讀者在學習iOS 8的同時,積累大量的 Swift 編碼經驗。
《iOS 8 Swift編程指南》適合所有層次的iOS開發者閱讀、參考,無論你是否具有Objective-C編程經驗。
目錄
第一部分 Swift語言編程指南
第1章 Swift初見/2
1.1 什麼是Swift/2
1.2 為什麼要學習Swift/3
1.3 Objective-C程式設計師學習Swift需要特別關注的地方/3
1.3.1 類型推斷與類型安全/4
1.3.2 泛型/5
1.3.3 數組和字典/6
1.3.4 字元串/7
1.3.5 switch語句/8
1.4 關於Swift初學者的一些問題/9
1.4.1 從哪裡獲得Swift/9
1.4.2 是否需要先學Objective-C,再學Swift/9
1.4.3 “老鳥”們學習Swift是否會更輕鬆/10
1.4.4 開發iOS 8和OS X Yosemite程式只能用Swift嗎/10
1.4.5 Swift是否能在當前的iOS和OS X版本上工作/10
1.4.6 什麼是Playground/11
1.4.7 關於NDA/11
1.4.8 有Swift能做到而Objective-C無法做到的嗎?反過來說呢/11
1.4.9 某些API是否無法被Swift調用/11
1.4.10 在Playground中,如何以圖表方式查看變數值/12
1.4.11 如何打開REPL/13
1.4.12 Swift如何調用Objective-C代碼或第三方庫/14
1.4.13 Swift數組只能存儲同一種類型的數據嗎/15
1.4.14 字典是否也和數組一樣是強類型的/15
1.4.15 Swift中有類似於Objective-C中的id嗎/15
1.4.16 在 Swift中,如何自省/15
1.4.17 在Swift中如何使用GCD/16
1.4.18 Objective-C中提供的Internationalization宏是否仍然可用/16
1.4.19 仍然需要注意持有循環嗎/17
1.4.20 何時使用strong、weak以及unowned/17
第2章 Swift語法基礎/18
2.1 Playground/18
2.2 常量、變數、字元串/21
2.2.1 常量/21
2.2.2 變數/21
2.2.3 分號/22
2.2.4 字元串/22
2.2.5 字元串插值和運算/23
2.3 簡單類型和類型推斷/23
2.3.1 數值類型/23
2.3.2 類型轉換/25
2.3.3 布爾類型/26
2.3.4 區間/26
2.3.5 元組/27
2.4 流程控制/28
2.4.1 for循環/28
2.4.2 while語句/31
2.4.3 if語句/31
2.4.4 switch語句/33
第3章 結構和類/38
3.1 可空類型/38
3.1.1 認識可空/38
3.1.2 聲明可空/40
3.1.3 可空類型與非可空類型的轉換/42
3.2 集合/44
3.2.1 數組/45
3.2.2 字典/47
3.3 枚舉/50
3.3.1 定義枚舉時填充原始值/50
3.3.2 使用其他類型/51
3.3.3 不填充原始值/52
3.3.4 聯合/53
3.4 結構和類綜述/54
3.4.1 屬性/54
3.4.2 構造器/55
3.4.3 實例方法/56
3.4.4 類方法/56
3.4.5 下標方法/57
3.4.6 繼承/59
第4章 Swift函式式編程/61
4.1 函式/61
4.1.1 函式的定義/61
4.1.2 外部參數名/62
4.1.3 簡化外部參數名/62
4.1.4 默認值/63
4.1.5 可變參數/64
4.1.6 變數參數和輸出參數/64
4.1.7 用函式作為參數/65
4.1.8 函式作為返回值/66
4.1.9 嵌套函式/67
4.2 閉包/68
4.2.1 聲明閉包/69
4.2.2 匿名閉包/69
4.2.3 尾末閉包/70
4.2.4 值捕獲/70
4.3 協定/71
4.3.1 協定的聲明/71
4.3.2 實現協定/72
4.3.3 協定是一種類型/72
4.3.4 組合協定/73
4.4 擴展/74
4.4.1 聲明擴展/74
4.4.2 擴展和協定/75
4.5 泛型/75
4.5.1 泛型函式/76
4.5.2 泛型和協定/76
4.5.3 泛型約束/77
4.5.4 泛型類型/78
4.6 可空鏈/79
4.6.1 ?操作符/79
4.6.2 ??操作符/82
第二部分 iOS 8 SDK
第5章 故事板與自適應布局/86
5.1 自適應布局入門/86
5.1.1 自適應布局的4個概念/87
5.1.2 Universal故事板/87
5.1.3 Size類/96
5.1.4 自適應字型/100
5.1.5 設備相關圖片/101
5.2 自適應布局進階/102
5.2.1 自適應單元格/102
5.2.2 自動安裝視圖/108
5.2.3 UITraitCollection類/119
5.2.4 覆蓋Size類/121
5.2.5 Size相關圖片/125
5.2.6 顯示/隱藏導航欄/127
5.2.7 UIAppearance和Size類/128
第6章 UISplitViewController及旋屏/130
6.1 創建UISplitViewController套用/131
6.2 在iPhone App中使用UISplitViewController/140
6.2.1 創建Detail默認視圖/140
6.2.2 在iPhone中展開UISplitViewController/143
6.2.3 記住用戶選擇/151
6.2.4 單元格指示器/154
6.2.5 對iPad進行適應/159
6.3 旋屏/162
6.3.1 舊的旋屏方法被廢棄/162
6.3.2 自定義旋屏效果/165
6.3.3 單元格自適應大小/167
6.3.4 iPad旋屏/169
6.3.5 自適應的UILabel/176
第7章 視圖控制器的呈現/180
7.1 初始項目/181
7.2 內置的Presentation Controller/182
7.2.1 UIAlertController/183
7.2.2 UIPopoverPresentationController/186
7.2.3 UISearchController/191
7.3 自定義UIPresentationController/196
7.3.1 Presented控制器和Presenting控制器/196
7.3.2 創建基本的PresentationController/197
7.3.3 自定義轉換動畫/200
7.3.4 高級定製/206
第8章 今日擴展/215
8.1 App擴展介紹/215
8.1.1 App擴展的類型/216
8.1.2 理解App擴展/219
8.2 今日擴展綜述/223
8.2.1 介紹今日擴展/223
8.2.2 WeatherWidget示例/223
8.2.3 討論/240
第9章 分享擴展/242
9.1 案例項目:SinaWeiboShare/242
9.1.1 實現容器App/243
9.1.2 創建分享擴展/257
9.2 討論/267
9.2.1 配置SLComposeSheetConfigurationItem/268
9.2.2 分享其他檔案/268
第10章 動作擴展/269
10.1 案例項目:SearchInICIBA/269
10.1.1 實現容器App/270
10.1.2 創建動作擴展/272
10.2 討論/280
第11章 照片編輯擴展/281
11.1 案例項目:PhotoVintage/281
11.1.1 實現容器App/282
11.1.2 實現照片編輯擴展/282
11.2 討論/292
第12章 文檔提供者擴展/294
12.1 準備/295
12.1.1 工作機制/295
12.1.2 文檔提供者擴展支持的4種操作/296
12.2 Bmob雲服務/297
12.2.1 註冊Bmob/297
12.2.2 創建套用/297
12.2.3 獲取App Key/298
12.2.4 Bmob SDK/299
12.3 開始/299
12.3.1 添加擴展App/299
12.3.2 配置Info.plist和entitlements/300
12.4 加入Bmob SDK框架/301
12.4.1 添加CocoaPods框架/301
12.4.2 橋接頭檔案/304
12.4.3 上傳圖片到Bmob/305
12.4.4 實現Document Picker/308
12.4.5 實現宿主App/314
12.4.6 實現File Provider/319
12.5 討論/322
第13章 鍵盤擴展/323
13.1 準備/323
13.2 鍵盤擴展的限制/323
13.3 值得信任/324
13.4 網路訪問/325
13.5 開始/326
13.5.1 創建鍵盤擴展/326
13.5.2 顯示鍵盤/327
13.5.3 設計按鈕及布局/329
13.6 實現KeyboardViewController/331
13.6.1 創建連線/331
13.6.2 實現按鍵處理/332
13.6.3 大小寫轉換/334
13.6.4 切換符號集/335
13.6.5 按鍵動畫/336
13.6.6 鍵盤最終運行效果/336
13.7 討論/337
第14章 CloudKit/338
14.1 準備/339
14.1.1 用戶授權/339
14.1.2 iCloud容器/340
14.1.3 資料庫/340
14.1.4 Zone/340
14.1.5 記錄/341
14.1.6 訂閱/341
14.2 開始/342
14.2.1 打開iCloud/342
14.2.2 程式主界面/343
14.2.3 全局對象/344
14.2.4 獲取用戶ID及姓名/345
14.2.5 將數據封裝為CKRecord/350
14.2.6 上傳照片/353
14.2.7 查看已經上傳的圖片/359
14.3 高級API/361
14.3.1 不完全抓取/362
14.3.2 分頁抓取/363
14.3.3 抓取並快取圖片/367
14.3.4 錯誤處理及網路重試/371
14.3.5 CloudKit Dashboard/372
14.4 討論/373
第15章 Photos框架/375
15.1 Photos初步/375
15.1.1 模型對象/376
15.1.2 抓取概述/376
15.1.3 檢索內容/377
15.1.4 初始項目/377
15.1.5 獲取用戶授權/378
15.1.6 抓取/379
15.1.7 顯示圖片/384
15.1.8 快取/387
15.1.9 標記用戶選擇/390
15.2 Photos進階/392
15.2.1 API介紹/393
15.2.2 初始項目/394
15.2.3 創建新的拼接圖/396
15.2.4 顯示拼接圖/400
15.2.5 收藏和刪除/403
15.2.6 增加修訂記錄/405
15.2.7 讀取修訂記錄/406
15.2.8 註冊變更通知/409
15.2.9 監聽變更通知/409
15.2.10 讓SpliceListVC處理變更通知/411
15.2.11 讓PhotoPicker處理變更通知/413
15.3 討論/414
第16章 Handoff/415
16.1 Handoff基礎/416
16.2 開始/416
16.2.1 Handoff兼容性/417
16.2.2 測試Handoff/418
16.2.3 初始項目/419
16.2.4 設定Team ID/420
16.2.5 添加活動類型/421
16.3 view活動/422
16.3.1 創建活動並開始廣播/422
16.3.2 更新用戶活動/423
16.3.3 停止廣播/423
16.4 edit活動/424
16.4.1 創建活動並開始廣播/424
16.4.2 更新用戶活動/425
16.4.3 停止廣播/425
16.5 恢復用戶活動/426
16.5.1 在應用程式委託中接收Handoff廣播/426
16.5.2 恢復view活動/428
16.5.3 恢復edit活動/429
16.6 討論/430
第17章 WebKit/432
17.1 開始/433
17.1.1 初始項目/433
17.1.2 創建WKWebView實例/433
17.1.3 載入Web頁/434
17.1.4 監視頁面載入進度/434
17.1.5 頁面導航/436
17.1.6 WKNavigationDelegate協定/436
17.2 WebKit進階/439
17.2.1 腳本調試工具/439
17.2.2 隱藏網頁內容/440
17.2.3 抓取頁面內容/444
17.2.4 顯示PopoverController/448
17.3 討論/450
第18章 Living Rendering/452
18.1 Living Rendering初步/453
18.1.1 開啟Living Redering特性/453
18.1.2 暴露@IBInspectable屬性/454
18.1.3 繪製boxLayer層/456
18.1.4 繪製markLayer層/457
18.1.5 繪製文本圖層/459
18.2 Living Rendering進階/461
18.2.1 使用點陣圖/461
18.2.2 回響事件/462
18.3 討論/463
第19章 Visual Effects/464
19.1 Visual Effects初步/464
19.1.1 初始項目/465
19.1.2 使用Visual Effect View實現模糊特效/465
19.1.3 使用Visual Effect View實現Vibrancy效果/467
19.2 Visual Effects進階/469
19.2.1 使用UIBlurEffect實現模糊效果/469
19.2.2 使用UIVibrancyEffect實現Vibrancy效果/471
……