主要內容
本書基於Swift 3.x,通過大量案例全面介紹蘋果平台的套用開發。全書共分5部分,diyi部分介紹了Swift的一些基礎知識,第二部分介紹了基於Swift語言的中高級內容,第三部分主要介紹了Swift與Objective-C/C/C++的混合編程等相關問題,第四部分介紹了基於Swift語言的2D遊戲引擎技術,第五部分詳細介紹了一個遊戲App的開發過程。
作者簡介
關東升,一個在IT領域摸爬滾打20年的程式設計師、培訓師、作者,另著有《iOS開發指南(第5版)》《Android網路遊戲開發實戰》《Cocos2d-x實戰》系列等書。
圖書目錄
第1章 準備起航
1.1 本書約定
1.1.1 示例代碼約定
1.1.2 圖示約定
1.1.3 函式和方法簽名約定
1.1.4 承接上一行代碼約定
1.1.5 代碼行號約定
1.2 Swift開發工具
1.2.1 Xcode開發工具
1.2.2 AppCode開發工具
1.3 本章小結
1.4 同步練習
第2章 第一個SWIFT程式
2.1 使用REPL
2.1.1 啟動Swift REPL
2.1.2 使用Swift REPL
2.2 使用Playground
2.2.1 編程利器Playground
2.2.2 編寫HelloWorld程式
2.3 通過Xcode創建macOS工程
2.3.1 創建macOS工程
2.3.2 編譯和運行
2.4 使用swiftc命令
2.4.1 編譯
2.4.2 運行
2.5 代碼解釋
2.6 本章小結
2.10 同步練習
第3章 SWIFT語法基礎
3.1 標識符和關鍵字
3.1.1 標識符
3.1.2 關鍵字
3.2 常量和變數
3.2.1 常量
3.2.2 變數
3.2.3 使用var還是let
3.3 注釋
3.4 表達式
3.5 本章小結
3.6 同步練習
第4章 運算符
4.1 算術運算符
4.1.1 一元運算符
4.1.2 二元運算符
4.1.3 算術賦值運算符
4.2 關係運算符
4.3 邏輯運算符
4.4 位運算符
4.5 其他運算符
4.6 本章小結
4.7 同步練習
第5章 SWIFT原生數據類型
5.1 Swift數據類型
5.2 整型
5.3 浮點型
5.4 數字表示方式
5.4.1 進制數字表示
5.4.2 指數表示
5.4.3 其他表示
5.5 數字類型之間的轉換
5.5.1 整型之間的轉換
5.5.2 整型與浮點型之間的轉換
5.6 布爾型
5.7 元組類型
5.8 可選類型
5.8.1 可選類型概念
5.8.2 可選類型值拆包
5.8.3 可選綁定
5.9 本章小結
5.10 同步練習
第6章 SWIFT原生字元串
6.1 字元
6.1.1 Unicode編碼
6.1.2 轉義符
6.2 創建字元串
6.3 可變字元串
6.3.1 字元串拼接
6.3.2 字元串插入、刪除和替換
6.4 字元串比較
6.4.1 大小和相等比較
6.4.2 前綴和後綴比較
6.5 本章小結
6.6 同步練習
第7章 控制語句
7.1 分支語句
7.1.1 if語句
7.1.2 switch語句
7.1.3 guard語句
7.2 循環語句
7.2.1 while語句
7.2.2 repeat-while語句
7.2.3 for語句
7.3 跳轉語句
7.3.1 break語句
7.3.2 continue語句
7.3.3 fallthrough語句
7.4 範圍與區間運算符
7.4.1 switch中使用區間運算符
7.4.2 for中使用區間運算符
7.5 值綁定
7.5.1 if中的值綁定
7.5.2 guard中的值綁定
7.5.3 switch中的值綁定
7.6 where語句
7.6.1 switch中使用where語句
7.6.2 for中使用where語句
7.7 本章小結
7.8 同步練習
第8章 SWIFT原生集合類型
8.1 Swift中的數組集合
8.1.1 數組聲明和初始化
8.1.2 可變數組
8.1.3 數組遍歷
8.2 Swift中的字典集合
8.2.1 字典聲明與初始化
8.2.2 可變字典
8.2.3 字典遍歷
8.3 Swift中的Set集合
8.3.1 Set聲明和初始化
8.3.2 可變Set集合
8.3.3 Set集合遍歷
8.3.4 Set集合運算
8.4 本章小結
8.5 同步練習
第9章 函式
9.1 定義函式
9.2 函式參數
9.2.1 使用參數標籤
9.2.2 省略參數標籤
9.2.3 參數默認值
9.2.4 可變參數
9.2.5 值類型參數的引用傳遞
9.3 函式返回值
9.3.1 無返回值函式
9.3.2 多返回值函式
9.4 函式類型
9.4.1 作為函式返回類型使用
9.4.2 作為參數類型使用
9.5 嵌套函式
9.6 本章小結
9.7 同步練習
第10章 閉包
10.1 回顧嵌套函式
10.2 閉包的概念
10.3 使用閉包表達式
10.3.1 類型推斷簡化
10.3.2 隱藏return關鍵字
10.3.3 省略參數名
10.3.4 使用閉包返回值
10.4 使用尾隨閉包
10.5 捕獲上下文中的變數和常量
10.6 本章小結
10.7 同步練習
第11章 SWIFT語言中的面向對象特性
11.1 面向對象概念和基本特徵
11.2 Swift中的面向對象類型
11.3 枚舉
11.3.1 成員值
11.3.2 原始值
11.3.3 相關值
11.4 結構體與類
11.4.1 類和結構體定義
11.4.2 再談值類型和引用類型
11.4.3 引用類型的比較
11.4.4 運算符重載
11.5 類型嵌套
11.6 可選鏈
11.6.1 可選鏈的概念
11.6.2 使用問號( )和感嘆號(!)
11.7 訪問限定
11.7.1 訪問範圍
11.7.2 訪問級別
11.7.3 使用訪問級別最佳實踐
11.8 選擇類還是結構體最佳實踐
11.8.1 類和結構體的異同
11.8.2 選擇的原則
11.9 本章小結
11.10 同步練習
第12章 屬性與下標
12.1 存儲屬性
12.1.1 存儲屬性概念
12.1.2 延遲存儲屬性
12.2 計算屬性
12.2.1 計算屬性的概念
12.2.2 唯讀計算屬性
12.2.3 結構體和枚舉中的計算屬性
12.3 屬性觀察者
12.4 靜態屬性
12.4.1 結構體靜態屬性
12.4.2 枚舉靜態屬性
12.4.3 類靜態屬性
12.5 使用下標
12.5.1 下標概念
12.5.2 示例:二維數組
12.6 本章小結
12.7 同步練習
第13章 方法
13.1 實例方法
13.2 可變方法
13.3 靜態方法
13.3.1 結構體靜態方法
13.3.2 枚舉靜態方法
13.3.3 類靜態方法
13.4 本章小結
13.5 同步練習
第14章 構造與析構
14.1 構造函式
14.1.1 默認構造函式
14.1.2 構造函式與存儲屬性初始化
14.1.3 使用參數標籤
14.2 構造函式重載
14.2.1 構造函式重載概念
14.2.2 結構體構造函式代理
14.2.3 類構造函式橫向代理
14.3 析構函式
14.4 本章小結
14.5 同步練習
第15章 類繼承
15.1 從一個示例開始
15.2 構造函式繼承
15.2.1 構造函式調用規則
15.2.2 構造過程安全檢查
15.2.3 構造函式繼承
15.3 重寫
15.3.1 重寫實例屬性
15.3.2 重寫靜態屬性
15.3.3 重寫實例方法
15.3.4 重寫靜態方法
15.3.5 下標重寫
15.3.6 使用final關鍵字
15.4 類型檢查與轉換
15.4.1 使用is進行類型檢查
15.4.2 使用as、as!和as 進行類型轉換
15.4.3 使用AnyObject和Any類型
15.5 本章小結
15.6 同步練習
第16章 擴展
16.1 “輕量級”繼承機制
16.2 聲明擴展
16.3 擴展計算屬性
16.4 擴展方法
16.5 擴展構造函式
16.5.1 值類型擴展構造函式
16.5.2 引用類型擴展構造函式
16.6 擴展下標
16.7 本章小結
16.8 同步練習
第17章 協定
17.1 協定概念
17.2 協定定義和遵從
17.3 協定方法
17.3.1 協定實例方法
17.3.2 協定靜態方法
17.3.3 協定可變方法
17.4 協定屬性
17.4.1 協定實例屬性
17.4.2 協定靜態屬性
17.5 面向協定編程
17.5.1 協定類型
17.5.2 協定的繼承
17.5.3 協定擴展
17.5.4 協定的合成
17.5.5 擴展中遵從協定
17.6 面向協定編程示例:表視圖中使用擴展協定
17.7 本章小結
17.8 同步練習
第18章 泛型
18.1 一個問題的思考
18.2 泛型函式
18.2.1 使用泛型函式
18.2.2 多類型參數
18.3 泛型類型
18.4 泛型擴展
18.5 本章小結
18.6 同步練習
第19章 SWIFT編碼規範
19.1 命名規範
19.2 注釋規範
19.2.1 檔案注釋
19.2.2 文檔注釋
19.2.3 代碼注釋
19.2.4 使用地標註釋
19.3 聲明
19.3.1 變數或常量聲明
19.3.2 屬性聲明
19.4 代碼排版
19.4.1 空行
19.4.2 空格
19.4.3 斷行
19.4.4 縮進
19.5 本章小結
19.6 同步練習
第20章 SWIFT記憶體管理
20.1 Swift記憶體管理概述
20.1.1 引用計數
20.1.2 示例:Swift自動引用計數
20.2 強引用循環
20.3 打破強引用循環
20.3.1 弱引用
20.3.2 無主引用
20.4 閉包中的強引用循環
20.4.1 一個閉包中的強引用循環示例
20.4.2 解決閉包強引用循環
20.5 本章小結
20.6 同步練習
第21章 錯誤處理
21.1 Cocoa錯誤處理模式
21.2 do-try-catch錯誤處理模式
21.2.1 捕獲錯誤
21.2.2 錯誤類型
21.2.3 聲明拋出錯誤
21.2.4 在函式或方法中拋出錯誤
21.2.5 try 和try!的使用區別
21.3 案例:MyNotes套用數據持久層實現
21.3.1 MyNotes套用介紹
21.3.2 MyNotes套用數據持久層設計
21.3.3 實現Note實體類
21.3.4 NoteDAO代碼實現
21.3.5 使用defer語句釋放資源
21.3.6 測試示例
21.4 本章小結
21.5 同步練習
第22章 FOUNDATION框架
22.1 數字類NSNumber
22.1.1 獲得NSNumber對象
22.1.2 比較NSNumber對象
22.1.3 數字格式化
22.1.4 NSNumber與Swift原生數字類型之間的橋接
22.2 字元串類
22.2.1 NSString類
22.2.2 NSMutableString類
22.2.3 NSString與String之間的橋接
22.3 數組類
22.3.1 NSArray類
22.3.2 NSMutableArray類
22.3.3 NSArray與Swift原生數組之間的橋接
22.4 字典類
22.4.1 NSDictionary類
22.4.2 NSMutableDictionary類
22.4.3 NSDictionary與Swift原生字典之間的橋接
22.5 NSSet集合類
22.5.1 NSSet類
22.5.2 NSMutableSet類
22.5.3 NSSet與Swift原生Set之間的橋接
22.6 檔案管理
22.6.1 訪問目錄
22.6.2 目錄操作
22.6.3 檔案操作
22.7 位元組快取
22.7.1 訪問位元組快取
22.7.2 示例:Base64解碼與編碼
22.8 日期與時間
22.8.1 NSDate和Date
22.8.2 日期時間格式化
22.8.3 NSCalendar、Calendar、NSDateComponents和DateComponents
22.8.4 示例:時區轉換
22.9 使用謂詞NSPredicate過濾數據
22.9.1 一個過濾員工花名冊的示例
22.9.2 使用謂詞NSPredicate
22.9.3 NSPrdicate與集合
22.9.4 格式說明符
22.9.5 運算符
22.10 使用正則表達式
22.10.1 在NSPredicate中使用正則表達式
22.10.2 使用NSRegularExpression
22.10.3 示例:日期格式轉換
22.11 本章小結
第23章 SWIFT與OBJECTIVE-C混合編程
23.1 選擇語言
23.2 檔案擴展名
23.3 Swift與Objective-C API映射
23.3.1 構造函式映射
23.3.2 方法名映射
23.4 同一套用目標中的混合編程
23.4.1 什麼是目標
23.4.2 Swift調用Objective-C
23.4.3 Objective-C調用Swift
23.5 同一框架目標中的混合編程
23.5.1 程式庫和框架
23.5.2 Swift調用Objective-C
23.5.3 測試框架目標
23.5.4 Objective-C調用Swift
23.6 本章小結
第24章 SWIFT與C/C++混合編程
24.1 數據類型映射
24.1.1 C語言基本數據類型
24.1.2 C語言指針類型
24.2 套用目標中的混合編程
24.2.1 Swift調用C API
24.2.2 Swift調用C++ API
24.3 框架目標中的混合編程
24.3.1 同一框架目標中Swift調用C或C++ API
24.3.2 Swift調用第三方庫中的C或C++ API
24.4 案例:用SQLite嵌入式資料庫實現MyNotes數據持久層
24.4.1 Note實體類代碼
24.4.2 創建表
24.4.3 插入數據
24.4.4 查詢數據
24.4.5 套用沙箱目錄
24.4.6 表示層開發
24.5 本章小結
第25章 SPRITEKIT遊戲引擎
25.1 移動平台遊戲引擎介紹
25.2 第一個SpriteKit遊戲
25.2.1 創建工程
25.2.2 工程剖析
25.3 一切都是節點
25.3.1 節點“家族”
25.3.2 節點樹
25.3.3 節點中重要的方法
25.3.4 節點中重要的屬性
25.4 精靈
25.4.1 精靈類SKSpriteNode
25.4.2 案例:沙漠英雄場景
25.4.3 使用紋理圖集性能最佳化
25.5 場景切換
25.5.1 場景切換方法
25.5.2 場景過渡動畫
25.5.3 案例:沙漠英雄場景切換
25.6 動作
25.6.1 常用動作
25.6.2 組合動作
25.6.3 案例:幀動畫實現
25.7 粒子系統
25.7.1 粒子系統屬性
25.7.2 內置粒子系統模板
25.8 遊戲音樂與音效
25.8.1 音頻檔案介紹
25.8.2 macOS和iOS平台音頻最佳化
25.8.3 背景音樂
25.8.4 3D音效
25.9 物理引擎
25.9.1 物理引擎核心概念
25.9.2 物理引擎中的物體
25.9.3 接觸與碰撞
25.9.4 案例:食品的接觸與碰撞
25.10 本章小結
第26章 遊戲APP實戰——迷失航線
26.1 《迷失航線》遊戲分析與設計
26.1.1 《迷失航線》故事背景
26.1.2 需求分析
26.1.3 原型設計
26.1.4 遊戲腳本
26.2 任務1:遊戲工程的創建與初始化
26.2.1 疊代1.1:創建工程
26.2.2 疊代1.2:自定義類型維護
26.2.3 疊代1.3:添加資源檔案
26.2.4 疊代1.4:添加粒子系統
26.3 任務2:創建Loading場景
26.3.1 疊代2.1:設計場景
26.3.2 疊代2.2:Loading動畫
26.3.3 疊代2.3:預處理載入紋理
26.4 任務3:創建Home場景
26.4.1 疊代3.1:設計場景
26.4.2 疊代3.2:實現代碼
26.5 任務4:創建設定場景
26.5.1 疊代4.1:設計場景
26.5.2 疊代4.2:實現代碼
26.6 任務5:創建幫助場景
26.6.1 疊代5.1:設計場景
26.6.2 疊代5.2:實現代碼
26.7 任務6:實現遊戲場景
26.7.1 疊代6.1:設計場景
26.7.2 疊代6.2:創建敵人精靈
26.7.3 疊代6.3:創建玩家飛機精靈
26.7.4 疊代6.4:創建子彈精靈
26.7.5 疊代6.5:初始化遊戲場景
26.7.6 疊代6.6:玩家移動飛機
26.7.7 疊代6.7:遊戲循環與任務調度
26.7.8 疊代6.8:遊戲場景選單實現
26.7.9 疊代6.9:玩家飛機發射子彈
26.7.10 疊代6.10:子彈與敵人的碰撞檢測
26.7.11 疊代6.11:玩家飛機與敵人的碰撞檢測
26.8 任務7:遊戲結束場景
26.8.1 疊代7.1:設計場景
26.8.2 疊代7.2:實現代碼
26.9 還有“最後一公里”
26.9.1 添加圖示
26.9.2 調整Identity和Deployment Info屬性
26.9.3 調整程式代碼
26.10 本章小結