本書共分為15章,主要內容包括編寫Swift開發環境配置、Swift語言基礎、語句和表達式、集合類型、程序控制結構、函數和閉包、類、繼承、枚舉和結構、構造器和析構器、擴展和協議、Swift語言的其他主題、使用Swift開發iOS應用、測試和發布App以及綜合實例打磚塊游戲等內容。書中對Swift語言中的一些開發技巧進行了展示。
本書內容豐富、結構新穎、難度適中、實用性強,可作為普通高等院校Swift程序設計課程的教材,也可供Swift開發初學人員參考閱讀。
1.全新平臺,全新技術。
本書以全新iOS 9為開發環境,并采用*新的開發工具Xcode 7進行講解。iOS 9為*新操作系統,將快速替代iOS 7、8等老版本系統,成為以后iPhone、iPad開發的主力平臺。
2.基礎鋪墊,入門容易
在國內,雖然iPhone、iPad雖然已經很普及,但是相關開發卻是這兩年才普及,越來越多的開發者學習iOS開發。本書針對讀者缺少ios開發基礎知識的特點,對基礎知識進行了鋪墊。
3.實例為主,上手容易
iOS以實用為目標。為了方便讀者學習致用,本書在講解知識點時貫穿了大量實例。這些實例短小精悍,非常方便讀者體驗實際編程,從而迅速提升開發水平。
程序設計類暢銷圖書作者,擅長程序設計、移動開發類選題。
其編寫的精通系列,創造了數十萬銷量的銷售佳績。
第1章 編寫第一個Swift程序 1
1.1 初識Swift 1
1.1.1 Swift的發展 1
1.1.2 Swift的特點 1
1.1.3 Swift語言的轉換 2
1.2 構建開發環境 2
1.2.1 申請蘋果賬號 3
1.2.2 安裝Xcode 6
1.2.3 更新新組件和文檔 9
1.3 編寫第一個程序 11
1.3.1 創建項目 11
1.3.2 Xcode界面介紹 13
1.3.3 編譯和運行 14
1.3.4 編寫代碼 15
1.4 Swift代碼分析 15
1.4.1 代碼構成 15
1.4.2 標識符 16
1.4.3 關鍵字 16
1.4.4 注釋 17
1.5 調試 18
1.6 使用幫助文檔 19
1.7 上機實踐 20
第2章 Swift語言基礎 21
2.1 常量變量 21
2.1.1 常量 21
2.1.2 變量 21
2.1.3 為聲明的變量和常量指定數據
類型 22
2.2 簡單數據類型 22
2.2.1 整數 22
2.2.2 整型 23
2.2.3 浮點類型 24
2.2.4 布爾類型 25
2.2.5 可選類型 25
2.3 字面值 26
2.3.1 整型字面值 26
2.3.2 浮點類型的字面值 26
2.3.3 布爾類型的字面值 28
2.4 高級數據類型——元組 28
2.5 類型別名 29
2.6 字符和字符串 29
2.6.1 字符類型與字面值 29
2.6.2 字符串類型與字面值 30
2.6.3 初始化空字符串 31
2.6.4 字符串連接 31
2.6.5 字符計數 32
2.6.6 判斷字符串 32
2.6.7 大小寫轉換 34
2.6.8 插入和刪除 35
2.7 編碼格式Unicode 37
2.7.1 什么是Unicode 37
2.7.2 字符串的Unicode表示形式 38
2.8 綜合案例 40
2.8.1 為圓周率3.14159265359指定數據
類型 40
2.8.2 組成字符串,并插入特殊符號 40
2.9 上機實踐 41
第3章 語句和表達式 42
3.1 語句 42
3.2 運算符與表達式 42
3.2.1 常用術語——元 42
3.2.2 賦值運算符和表達式 43
3.2.3 算術運算符和表達式 43
3.2.4 求余運算符和表達式 46
3.2.5 自增自減運算符和表達式 47
3.2.6 一元負號運算符 49
3.2.7 一元正號運算符 50
3.2.8 位運算符 50
3.2.9 溢出運算符 55
3.2.10 比較運算符和表達式 57
3.2.11 三元條件運算符和表達式 58
3.2.12 邏輯運算符和表達式 58
3.2.13 范圍運算符 61
3.2.14 復合賦值運算符和表達式 62
3.2.15 求字節運算符和表達式 63
3.2.16 強制解析 63
3.2.17 空合運算符 63
3.3 數值類型轉換 64
3.3.1 整數的轉換 64
3.2.2 整數和浮點數的轉換 65
3.4 綜合案例 66
3.4.1 水仙花數 66
3.4.2 將7489逆序輸出 66
3.5 上機實踐 67
第4章 集合類型 68
4.1 數組 68
4.1.1 數組字面量 68
4.1.2 數組的聲明 68
4.1.3 數組的初始化 69
4.2 數組的操作 71
4.2.1 獲取數組中元素個數 71
4.2.2 判斷數組是否為空 71
4.2.3 在末尾添加一個元素 72
4.2.4 插入值 73
4.2.5 讀取值 74
4.2.6 修改值 74
4.2.7 刪除值 75
4.3 集合 76
4.3.1 集合的聲明 76
4.3.2 集合的初始化 77
4.4 集合的操作 78
4.4.1 獲取集合中元素個數 78
4.4.2 判斷集合是否為空 78
4.4.3 判斷集合中是否包含某一值 79
4.4.4 插入值 79
4.4.5 刪除值 79
4.4.6 確定集合的順序 81
4.5 集合的基本運算 81
4.5.1 a∩b 81
4.5.2 a∪b 82
4.5.3 a-b 83
4.5.4 a-b∪b-a 83
4.6 集合間關系 84
4.6.1 相等判斷 84
4.6.2 子集的判斷 85
4.6.3 父集合的判斷 85
4.6.4 其他判斷 86
4.7 字典 86
4.7.1 字典字面量 86
4.7.2 字典的聲明 87
4.7.3 字典的初始化 87
4.8 字典的操作 88
4.8.1 獲取字典中的元素個數 88
4.8.2 讀取鍵的值 88
4.8.3 添加元素 89
4.8.4 修改鍵關聯的值 89
4.8.5 刪除值 90
4.9 綜合案例 91
4.9.1 求3科成績的平均值 91
4.9.2 獲取奇數月 92
4.10 上機實踐 94
第5章 程序控制結構 95
5.1 順序結構 95
5.2 選擇結構——if語句 95
5.2.1 if語句 96
5.2.2 if...else語句 96
5.2.3 if...else if語句 97
5.2.4 if語句的嵌套 98
5.3 選擇結構——switch語句 99
5.3.1 switch語句基本形式 99
5.3.2 switch語句的使用規則 100
5.4 循環結構——for語句 103
5.4.1 for...in循環 103
5.4.2 for-condition-increment條件循環 108
5.5 循環結構——while語句 108
5.5.1 while循環 109
5.5.2 repeat while循環 110
5.6 跳轉語句 110
5.6.1 continue語句 110
5.6.2 break語句 111
5.6.3 fallthrough 112
5.7 標簽語句 112
5.7.1 標簽語句的定義 113
5.7.2 標簽語句的使用 113
5.8 綜合案例 114
5.8.1 打印九九乘法表 114
5.8.2 使用if else比較3個數值大小 115
5.8.3 計算1~100的奇數和 116
5.9 上機實踐 116
第6章 函數和閉包 117
6.1 函數介紹 117
6.1.1 函數的功能 117
6.1.2 函數的形式 118
6.2 使用無參函數 118
6.2.1 無參函數的聲明定義 119
6.2.2 無參函數的調用 119
6.2.3 空函數 119
6.3 使用有參函數 120
6.3.1 有參函數的聲明定義 120
6.3.2 有參函數的調用 120
6.3.3 參數的注意事項 121
6.4 函數參數的特殊情況 121
6.4.1 函數參數名 122
6.4.2 指定外部參數名 122
6.4.3 忽略外部參數名 122
6.4.4 為參數設置默認值 123
6.4.5 可變參數 123
6.4.6 常量參數和變量參數 124
6.4.7 輸入-輸出參數 124
6.5 函數的返回值 125
6.5.1 具有一個返回值的函數 125
6.5.2 具有多個返回值的函數 126
6.5.3 可選元組返回類型 127
6.5.4 無返回值 128
6.6 函數類型 128
6.6.1 使用函數類型 129
6.6.2 使用函數類型作為參數類型 129
6.6.3 使用函數類型作為返回值類型 130
6.7 標準函數 131
6.7.1 絕對值函數abs() 131
6.7.2 最大值函數max()/最小值函數
min() 132
6.7.3 序列排序函數sortInPlace() 132
6.7.4 序列倒序函數reverse() 133
6.8 函數的嵌套 133
6.8.1 嵌套調用 134
6.8.2 遞歸調用 135
6.9 閉包 135
6.9.1 閉包表達式 136
6.9.2 Trailing閉包 138
6.9.3 捕獲值 139
6.10 綜合案例 140
6.10.1 打印金字塔 140
6.10.2 猴子吃桃 141
6.11 上機實踐 142
第7章 類 143
7.1 類與對象 143
7.1.1 類的組成 143
7.1.2 創建類 143
7.1.3 實例化對象 144
7.2 屬性 144
7.2.1 存儲屬性 144
7.2.2 計算屬性 146
7.2.3 類型屬性 148
7.2.4 屬性監視器 150
7.3 方法 152
7.3.1 實例方法 152
7.3.2 類型方法 153
7.3.3 存儲屬性、局部變量和全局變量
的區別 155
7.3.4 局部變量和存儲屬性同名的解決
方法——self屬性 156
7.4 下標腳本 157
7.4.1 定義下標腳本 157
7.4.2 調用下標腳本 157
7.4.3 使用下標腳本 158
7.5 類的嵌套 160
7.5.1 直接嵌套 160
7.5.2 多次嵌套 161
7.6 可選鏈接 162
7.6.1 使用可選鏈接調用代替強制解析 163
7.6.2 通過可選鏈接調用屬性、下標
腳本、方法 163
7.6.3 連接多個鏈接 165
7.7 綜合案例 166
7.7.1 收支情況 166
7.7.2 根據周長計算面積 167
7.8 上機實踐 168
第8章 繼承 170
8.1 為什么要使用繼承 170
8.1.1 重用代碼、簡化代碼 170
8.1.2 擴展功能 170
8.2 繼承的實現 170
8.2.1 繼承的定義 170
8.2.2 屬性的繼承 172
8.2.3 下標腳本的繼承 173
8.2.4 方法的繼承 174
8.3 繼承的特點 174
8.3.1 多層繼承 174
8.3.2 不可刪除 175
8.4 重寫 176
8.4.1 重寫屬性 176
8.4.2 重寫下標腳本 178
8.4.3 重寫方法 179
8.4.4 訪問父類成員 180
8.4.5 阻止重寫 182
8.5 類型轉換 184
8.5.1 類型檢查 184
8.5.2 向下轉型 185
8.5.3 AnyObject和Any的類型轉換 185
8.6 綜合案例 187
8.7 上機實踐 188
第9章 枚舉和結構 189
9.1 枚舉的構成 189
9.2 定義枚舉 189
9.2.1 任意類型的枚舉類型 189
9.2.2 指定數據類型的枚舉類型 190
9.3 定義枚舉的成員 190
9.3.1 定義任意類型的枚舉成員 190
9.3.2 定義指定數據類型的枚舉成員 191
9.3.3 定義枚舉成員時的注意事項 192
9.4 實例化枚舉的對象 192
9.5 枚舉成員與switch匹配 192
9.6 訪問枚舉類型中成員的原始值 193
9.6.1 通過成員訪問原始值 193
9.6.2 通過原始值訪問成員 194
9.7 關聯值 195
9.8 定義枚舉的其他內容 195
9.8.1 定義屬性 195
9.8.2 定義方法 197
9.8.3 定義下標腳本 198
9.9 遞歸枚舉 199
9.10 結構的構成 200
9.11 結構的創建與實例化 200
9.11.1 結構的創建 200
9.11.2 結構體的實例化 200
9.12 定義結構中的內容 201
9.12.1 定義屬性 201
9.12.2 定義方法 204
9.12.3 定義下標腳本 205
9.13 類、枚舉、結構的區別 206
9.14 嵌套類型 206
9.15 綜合案例 208
9.15.1 輸出對應音符發音 208
9.15.2 根據棱長計算正方體的表面積和
體積 208
9.16 上機實踐 209
第10章 構造器和析構器 210
10.1 值類型的構造器 210
10.1.1 默認構造器 210
10.1.2 自定義構造器 211
10.1.3 構造器代理 214
10.2 類的構造器 216
10.2.1 默認構造器 217
10.2.2 自定義構造器 217
10.2.3 構造器代理 220
10.2.4 類的兩段式構造過程 221
10.2.5 構造器的繼承和重載 222
10.2.6 必要構造器 225
10.3 可失敗構造器 226
10.3.1 定義可失敗構造器 226
10.3.2 枚舉類型的可失敗構造器 227
10.3.3 類的可失敗構造器 228
10.3.4 構造失敗的傳遞 229
10.3.5 重寫一個可失敗構造器 230
10.3.6 可失敗構造器init! 231
10.4 構造器的特殊情況 232
10.4.1 可選屬性類型 232
10.4.2 修改常量屬性 232
10.5 設置默認值 233
10.5.1 在定義時直接賦值 233
10.5.2 在構造器中賦值 233
10.5.3 使用閉包設置屬性的默認值 234
10.5.4 使用函數設置默認值 235
10.6 析構器 235
10.6.1 理解析構器 235
10.6.2 析構器的定義 236
10.6.3 使用析構器 236
10.6.4 使用析構器的注意事項 237
10.6.5 構造器和析構器的區別 239
10.7 綜合案例 239
10.7.1 游戲屬性 239
10.7.2 模擬下線通知 240
10.8 上機實踐 240
第11章 擴展和協議 241
11.1 擴展 241
11.1.1 擴展的定義 241
11.1.2 擴展屬性 241
11.1.3 擴展構造器 243
11.1.4 擴展方法 244
11.1.5 擴展下標腳本 246
11.1.6 擴展嵌套類型 247
11.2 協議 248
11.2.1 協議的定義 248
11.2.2 協議的實現 248
11.2.3 協議的成員聲明——屬性 249
11.2.4 協議的成員聲明——方法 251
11.2.5 協議的成員聲明——可變方法 252
11.2.6 協議的成員聲明——構造器 253
11.3 可選協議 254
11.3.1 定義可選協議 254
11.3.2 聲明可選成員 254
11.3.3 調用可選協議 255
11.4 使用協議 256
11.4.1 協議作為常量、變量等的數據
類型 256
11.4.2 協議作為返回值或參數類型 257
11.4.3 協議作為集合的元素類型 258
11.5 在擴展中使用協議 259
11.5.1 在擴展中實現協議 259
11.5.2 定義協議成員 259
11.5.3 擴展協議聲明 260
11.6 協議的繼承 260
11.7 協議合成 262
11.8 檢查協議的一致性 263
11.9 委托 264
11.10 綜合案例 267
11.11 上機實踐 268
第12章 Swift語言的其他主題 269
12.1 自動引用計數 269
12.1.1 自動引用計數的工作機制 269
12.1.2 循環強引用的產生 270
12.1.3 循環強引用的解決方法 273
12.2 運算符重載 278
12.2.1 為什么使用運算符重載 278
12.2.2 算術運算符的重載 278
12.2.3 一元負號/正號運算符的重載 279
12.2.4 復合賦值運算符的重載 280
12.2.5 自增自減運算符的重載 281
12.2.6 比較運算符的重載 285
12.2.7 自定義運算符的重載 286
12.3 泛型 289
12.3.1 泛型函數 289
12.3.2 泛型類型 290
12.3.3 泛型類的層次結構 292
12.3.4 擴展一個泛型類型 294
12.3.5 具有多個類型參數的泛型 295
12.3.6 類型約束 295
12.3.7 關聯類型 296
12.4 錯誤處理 300
12.4.1 拋出錯誤 300
12.4.2 捕獲錯誤和處理錯誤 301
12.4.3 清理動作 302
12.5 綜合案例 302
12.6 上機實踐 303
第13章 使用Swift開發iOS
應用 304
13.1 創建項目 304
13.2 運行程序 306
13.3 模擬器的操作 307
13.3.1 模擬器與真機的區別 307
13.3.2 退出應用程序 307
13.3.3 應用程序圖標的設置 307
13.3.4 語言設置 309
13.3.5 旋轉 312
13.3.6 刪除應用程序 312
13.4 編輯界面 313
13.4.1 界面介紹 313
13.4.2 設計界面 314
13.4.3 視圖對象庫的介紹 316
13.4.4 編寫代碼 317
13.5 上機實踐 320
第14章 測試和發布App 321
14.1 測試App概述 321
14.1.1 測試驅動的軟件開發流程 321
14.1.2 iOS單元測試框架 322
14.2 使用XCTest測試框架測試驅動的
軟件開發案例 322
14.2.1 測試案例前期準備 322
14.2.2 添加XCTest到項目中 326
14.2.3 測試驅動的開發流程 328
14.3 發布前的準備工作 332
14.3.1 申請付費的開發者賬號 332
14.3.2 申請App ID 335
14.3.3 申請證書 336
14.3.4 添加圖標 343
14.3.5 調整Application Target屬性 344
14.3.6 為發布進行編譯 345
14.3.7 應用打包 347
14.4 進行發布 349
14.4.1 創建應用及基本信息 349
14.4.2 應用定價信息 352
14.4.3 上傳應用 353
14.5 常見審核不通過的原因 357
14.6 上機實踐 358
第15章 綜合案例:打磚塊游戲 359
15.1 功能介紹 359
15.2 界面設計 360
15.2.1 準備工作 360
15.2.2 主界面設計 361
15.2.3 游戲界面設計 362
15.2.4 游戲介紹界面設計 363
15.3 功能實現 364
15.3.1 界面之間的切換 364
15.3.2 打磚塊游戲功能 368
15.4 真機測試 374