圖書介紹
本書由淺入深,全面而系統地介紹了Swift開發技術。本書針對每一個知識點都配備了相應的實例,以幫助讀者快速學習和掌握Swift語言。本書總結了讀者在開發Swift程式時容易出現的錯誤,並分析了出錯的原因,使得讀者可以避免一些不必要的錯誤,並且也可以了解遇到問題時如何進行修改。
全書共16章,分為3篇。第1篇介紹了Swift開發環境的搭建、Swift基本應用程式的創建、數據類型、語句、表達式、字元串、集合類型、程式控制結構、函式和閉包等內容;第2篇介紹了類、繼承、枚舉類型、結構、構造器、析構方法、擴展和協定等內容;第3篇介紹了自動引用計數、運算符重載和泛型等內容。
本書涉及面廣,從基礎理論到語法,再到高級套用,幾乎涉及Swift開發的所有重要知識。本書適合所有想要學習Swift開發技術的人員閱讀,也適合想要向Swift遷移的Objective-C程式設計師閱讀。
內容體系
第1篇 Swift開發基礎(第1~7章)
本篇主要介紹了Swift語言開發基礎知識,涵蓋的內容有Swift開發環境的搭建、Swift基本應用程式的創建、數據類型、語句、表達式、字元串、集合類型、程式控制結構、函式和閉包等。通過學習本篇內容,讀者可以掌握Swift開發環境的搭建及Swift編程的語法與核心思想。
第2篇 面向對象編程(第8~13章)
本篇主要介紹了Swift語言的面向對象特性,涵蓋的主要內容有類、繼承、枚舉類型、結構、構造方法、析構方法、擴展和協定等。通過學習本篇內容,讀者可以掌握Swift面向對象編程的核心技術與套用。
第3篇 Swift高級開發技術(第14~16章)
本篇主要介紹了Swift語言的高級開發技術,涵蓋的主要內容有自動引用計數、運算符重載和泛型等。通過學習本篇內容,讀者可以掌握Swift語言中的高級技術。
讀者對象
* Swift語言初學者;
* 想全面學習Swift技術的人員;
* iOS專業開發人員;
* 想要從Objective-C過渡到Swift的人員;
* Swift開發愛好者;
* 大中專院校的學生;
* 社會培訓班的學員。
作者
本書由陳雋和劉媛媛主筆編寫。其中,江蘇省淮安市行政學院的陳雋老師負責編寫了第1~11章,劉媛媛負責編寫了第12~16章。其他參與編寫的人員有陳剛、陳世瓊、黃點點、黃海力、黃紹斌、蔣春蕾、李國良、李俊娜、李曉娜、劉永純、王書勇、王挺、王文強、張偉、張小華、胡丹萍、王以榮、徐陽。
目錄
第1篇 Swift開發基礎
第1章 編寫第一個Swift程式2
1.1 初識Swift2
1.1.1 Swift的誕生2
1.1.2 Swift的特點與不足2
1.2 搭建開發環境3
1.2.1 安裝Xcode 63
1.2.2 安裝組件4
1.2.3 更新組件和文檔5
1.3 編寫第一個程式5
1.3.1 創建項目6
1.3.2 Xcode 6.1界面介紹9
1.3.3 編譯和運行11
1.3.4 編寫代碼11
1.3.5 生成執行檔12
1.4 Swift代碼分析14
1.4.1 代碼的構成14
1.4.2 標識符14
1.4.3 關鍵字15
1.4.4 注釋16
1.4.5 檔案構成17
1.5 使用幫助文檔17
第2章 數據類型19
2.1 常量和變數19
2.1.1 常量19
2.1.2 變數20
2.1.3 為聲明的變數和常量指定數據類型20
2.2 簡單的數據類型21
2.2.1 整數(Integer)21
2.2.2 整型22
2.2.3 浮點類型23
2.2.4 字元類型/字元串類型25
2.2.5 布爾類型26
2.2.6 可選類型26
2.3 字面值27
2.3.1 整型字面值27
2.3.2 浮點類型的字面值28
2.3.3 字元型字面值29
2.3.4 字元串字面值29
2.3.5 布爾類型的字面值30
2.4 高級數據類型——元組30
2.5 類型別名33
第3章 語句和表達式34
3.1 語句34
3.2 運算符與表達式34
3.2.1 常用術語——元34
3.2.2 賦值運算符和表達式35
3.2.3 算術運算符和表達式35
3.2.4 取余運算符和表達式38
3.2.5 自增自減運算符和表達式39
3.2.6 一元減運算符41
3.2.7 一元加運算符41
3.2.8 位運算符41
3.2.9 溢出運算符48
3.2.10 比較運算符和表達式50
3.2.11 三元條件運算符51
3.2.12 邏輯運算符和表達式52
3.2.13 範圍運算符55
3.2.14 複合賦值運算符和表達式56
3.2.15 求位元組運算符和表達式57
3.2.16 強制解析57
3.3 類型轉換58
3.3.1 整數的轉換58
3.3.2 整數和浮點數的轉換59
第4章 字元串61
4.1 字元串的初始化61
4.1.1 字元串的種類61
4.1.2 初始化空的字元串62
4.1.3 使用字元串初始化字元串62
4.1.4 計算字元個數63
4.1.5 遍歷字元63
4.2 字元串組合63
4.2.1 字元串與字元組合64
4.2.2 字元串與字元串組合65
4.3 字元串判斷66
4.3.1 判斷字元串是否為空66
4.3.2 判斷字元串相等66
4.3.3 判斷前綴67
4.3.4 判斷後綴68
4.4 大小寫轉換69
4.4.1 大寫轉換69
4.4.2 小寫轉換69
4.5 Unicode編碼70
4.5.1 Unicode術語70
4.5.2 Unicode字元串70
4.5.3 UTF-8編碼71
4.5.4 UTF-16編碼71
4.5.5 UTF標量72
第5章 集合類型73
5.1 數組73
5.1.1 數組字面量73
5.1.2 數組的定義73
5.1.3 數組的初始化74
5.2 數組的操作76
5.2.1 獲取數組中元素的個數76
5.2.2 判斷數組是否為空76
5.2.3 判斷兩個數組是否共用相同的元素77
5.2.4 複製數組78
5.2.5 在末尾添加一個元素78
5.2.6 插入值79
5.2.7 讀取值80
5.2.8 修改值80
5.2.9 刪除值82
5.2.10 遍歷數組84
5.3 字典85
5.3.1 字典字面量85
5.3.2 字典的定義85
5.3.3 字典的初始化86
5.4 字典的操作87
5.4.1 獲取字典中的元素個數87
5.4.2 讀取鍵的值87
5.4.3 添加元素88
5.4.4 修改鍵關聯的值88
5.4.5 刪除鍵89
5.4.6 遍歷91
5.5 可變的集合類型92
第6章 程式控制結構93
6.1 順序結構93
6.1.1 程式的執行流程93
6.1.2 代碼調試94
6.2 選擇結構——if語句95
6.2.1 if語句95
6.2.2 if...else語句96
6.2.3 if...else if語句97
6.3 選擇結構——switch語句99
6.3.1 switch語句基本形式99
6.3.2 規則1:相同的常量或常量表達式101
6.3.3 規則2:可執行的語句不能為空102
6.3.4 規則3:多條件組合102
6.3.5 規則4:範圍匹配102
6.3.6 規則5:使用元組103
6.3.7 規則6:數值綁定104
6.3.8 規則7:使用where關鍵字105
6.4 循環結構——for語句106
6.4.1 for...in循環107
6.4.2 for-condition-increment條件循環108
6.5 循環結構——while語句109
6.5.1 while循環110
6.5.2 do while循環111
6.6 跳轉語句112
6.6.1 continue語句112
6.6.2 break語句113
6.6.3 fallthrough語句114
6.6.4 使用標籤語句114
第7章 函式和閉包117
7.1 函式介紹117
7.2 使用無參函式118
7.2.1 無參函式的聲明定義118
7.2.2 無參函式的調用119
7.2.3 空函式120
7.3 使用有參函式120
7.3.1 有參函式的聲明定義120
7.3.2 有參函式的調用121
7.3.3 參數的注意事項122
7.4 函式參數的特殊情況123
7.4.1 本地參數名123
7.4.2 外部參數名123
7.4.3 設定參數默認值125
7.4.4 為外部參數設定默認值126
7.4.5 可變參數126
7.4.6 常量參數和變數參數127
7.4.7 輸入-輸出參數128
7.5 函式的返回值130
7.5.1 具有一個返回值的函式130
7.5.2 具有多個返回值的函式130
7.5.3 無返回值132
7.6 函式類型132
7.6.1 使用函式類型133
7.6.2 使用函式類型作為參數類型134
7.6.3 使用函式類型作為返回值類型134
7.7 標準函式135
7.7.1 絕對值函式abs()135
7.7.2 最大值函式max()/最小值函式min()136
7.7.3 序列的最大值函式maxElement()/最小值函式minElement()137
7.7.4 判斷序列是否包含指定元素函式contains()138
7.7.5 序列排序函式sort()139
7.7.6 序列倒序函式reverse()139
7.8 函式嵌套調用形式140
7.8.1 嵌套調用基本形式140
7.8.2 遞歸調用141
7.9 閉包142
7.9.1 閉包表達式143
7.9.2 使用閉包表達式的注意事項146
7.9.3 Trailing閉包147
7.9.4 捕獲值148
第2篇 面向對象編程
第8章 類152
8.1 類與對象152
8.1.1 類的組成152
8.1.2 創建類152
8.1.3 實例化對象153
8.2 屬性153
8.2.1 存儲屬性154
8.2.2 計算屬性158
8.2.3 類型屬性162
8.2.4 屬性監視器165
8.3 方法168
8.3.1 實例方法168
8.3.2 類型方法171
8.3.3 存儲屬性、局部變數和全局變數的區別174
8.3.4 局部變數和存儲屬性同名的解決方法——self屬性175
8.4 下標腳本176
8.4.1 定義下標腳本176
8.4.2 調用下標腳本177
8.4.3 使用下標腳本177
8.5 類的嵌套181
8.5.1 直接嵌套181
8.5.2 多次嵌套182
8.6 可選連結184
8.6.1 可選連結的實現方式184
8.6.2 通過可選連結調用屬性、下標腳本和方法185
8.6.3 連線多個連結188
第9章 繼承189
9.1 為什麼使用繼承189
9.1.1 減少代碼量189
9.1.2 擴展功能190
9.2 繼承的實現191
9.2.1 繼承的定義191
9.2.2 屬性的繼承191
9.2.3 下標腳本的繼承193
9.2.4 方法的繼承193
9.3 繼承的特點194
9.3.1 多層繼承194
9.3.2 不可刪除196
9.4 重寫196
9.4.1 重寫屬性196
9.4.2 重寫下標腳本199
9.4.3 重寫方法200
9.4.4 重寫的注意事項201
9.4.5 訪問父類成員202
9.4.6 阻止重寫205
9.5 類型檢查208
9.5.1 類型檢查——is208
9.5.2 類型檢查——as210
9.5.3 AnyObject和Any的類型檢查212
第10章 枚舉類型215
10.1 枚舉類型的組成215
10.2 定義枚舉類型215
10.2.1 任意類型的枚舉類型216
10.2.2 指定數據類型的枚舉類型216
10.3 定義枚舉類型的成員217
10.3.1 定義任意類型的枚舉成員217
10.3.2 定義指定數據類型的枚舉類型成員218
10.3.3 注意事項220
10.4 實例化枚舉類型的對象221
10.5 訪問枚舉類型中成員的原始值221
10.5.1 通過成員訪問原始值221
10.5.2 通過原始值獲取成員223
10.6 枚舉成員與switch匹配224
10.7 相關值226
10.8 定義枚舉類型的屬性227
10.8.1 計算屬性228
10.8.2 類型屬性228
10.8.3 屬性監視器229
10.9 定義枚舉類型的下標腳本229
10.10 定義枚舉類型的方法230
10.10.1 實例方法230
10.10.2 類型方法232
10.11 枚舉類型的套用233
10.11.1 為常量/變數賦值233
10.11.2 作為函式的參數234
10.12 枚舉類型嵌套235
10.12.1 直接嵌套235
10.12.2 多次嵌套236
第11章 結構238
11.1 結構的定義和實例化238
11.1.1 結構的構成238
11.1.2 定義結構238
11.1.3 實例化對象239
11.2 定義結構的屬性239
11.2.1 存儲屬性239
11.2.2 計算屬性241
11.2.3 類型屬性242
11.2.4 添加屬性監視器242
11.2.5 初始化實例對象243
11.3 定義結構的下標腳本245
11.4 定義結構的方法246
11.4.1 實例方法246
11.4.2 類型方法247
11.5 結構嵌套248
11.5.1 直接嵌套248
11.5.2 多次嵌套249
11.6 類、枚舉類型和結構的區別251
11.7 類、枚舉和結構的嵌套251
11.7.1 枚舉使用在類中252
11.7.2 枚舉使用在結構中252
11.7.3 類使用在結構中253
第12章 構造方法和析構方法255
12.1 值類型的構造器255
12.1.1 默認構造器255
12.1.2 自定義構造器256
12.1.3 構造器代理260
12.2 類的構造器264
12.2.1 默認構造器264
12.2.2 自定義構造器264
12.2.3 構造器代理269
12.2.4 構造器的繼承和重載270
12.3 構造器的特殊情況277
12.3.1 可選類型277
12.3.2 修改常量屬性278
12.4 類的構造278
12.5 設定默認值280
12.5.1 在定義時直接賦值280
12.5.2 在構造器中賦值281
12.5.3 使用閉包設定屬性的默認值281
12.5.4 使用函式設定默認值283
12.6 析構方法283
12.6.1 理解析構283
12.6.2 析構方法的定義284
12.6.3 使用析構方法284
12.6.4 構造方法和析構方法的區別286
第13章 擴展和協定287
13.1 擴展287
13.1.1 擴展的定義287
13.1.2 擴展屬性287
13.1.3 擴展構造器290
13.1.4 擴展方法292
13.1.5 擴展下標腳本294
13.1.6 擴展嵌套類型295
13.2 協定296
13.2.1 協定的定義296
13.2.2 協定的實現296
13.2.3 協定的成員聲明——屬性298
13.2.4 協定的成員聲明——方法301
13.2.5 協定的成員聲明——可變方法303
13.3 可選協定304
13.3.1 定義可選協定305
13.3.2 聲明可選成員305
13.3.3 調用可選協定307
13.4 使用協定類型309
13.4.1 協定類型作為常量、變數等的數據類型309
13.4.2 協定類型的返回值或參數309
13.4.3 協定類型作為集合的元素類型310
13.5 在擴展中使用協定311
13.5.1 在擴展中實現協定311
13.5.2 定義協定成員311
13.5.3 擴展協定聲明312
13.6 協定的繼承312
13.7 協定組合314
13.8 檢查協定的一致性315
13.9 委託316
第3篇 Swift高級開發技術
第14章 自動引用計數(ARC)320
14.1 自動引用計數的工作機制320
14.2 循環強引用的產生322
14.2.1 類實例之間的循環強引用322
14.2.2 閉包引起的循環強引用324
14.3 循環強引用的解決方法326
14.3.1 解決類實例之間的循環強引用326
14.3.2 解決閉包引起的循環強引用331
第15章 運算符重載335
15.1 為什麼使用運算符重載335
15.2 算術運算符的重載335
15.3 一元減/加運算符的重載337
15.3.1 一元減運算符的重載337
15.3.2 一元加運算符的重載338
15.4 複合賦值運算符的重載338
15.5 自增自減運算符的重載340
15.5.1 自增運算符的重載340
15.5.2 自減運算符的重載342
15.6 比較運算符的重載344
15.6.1 “==”相等運算符的重載344
15.6.2 “!=”不相等運算符的重載345
15.6.3 其他比較運算符的重載346
15.7 自定義運算符的重載347
15.7.1 前置自定義運算符的重載347
15.7.2 中置自定義運算符的重載348
15.7.3 後置自定義運算符的重載349
15.7.4 自定義運算符的優先權和結合性351
15.8 注意事項357
15.8.1 重載後運算符的優先權357
15.8.2 不可以重載的運算符358
第16章 泛型359
16.1 為什麼使用泛型359
16.2 泛型函式360
16.3 泛型類型361
16.3.1 泛型枚舉361
16.3.2 泛型結構361
16.3.3 泛型類363
16.4 泛型類的層次結構364
16.4.1 使用泛型基類364
16.4.2 使用泛型派生類365
16.5 具有多個類型參數的泛型366
16.6 類型約束367
16.7 關聯類型368
16.7.1 定義關聯類型368
16.7.2 擴展已存在類型為關聯類型370
16.7.3 約束關聯類型371