Swift语言快速入门
Swift語(yǔ)言快速入門(mén)(首部同步新版官方API文檔和語(yǔ)法的Swift圖書(shū),確保代碼可編譯,作者專家在線答疑,圖書(shū)勘誤實(shí)時(shí)跟進(jìn))
極客學(xué)院 編著??
ISBN 978-7-121-24328-8
2014年10月出版
定價(jià):59.00元
428頁(yè)
16開(kāi)
編輯推薦
本書(shū)內(nèi)容翔實(shí),實(shí)例豐富,同步新版官方API文檔和語(yǔ)法
語(yǔ)法|詞法|框架覆蓋全面,實(shí)戰(zhàn)案例|配套習(xí)題豐富
多位Swift專家聯(lián)合推薦,不僅是Swift入門(mén)書(shū)籍,也可做案頭工具書(shū)
作者攜手Swift專家在線答疑,方式如下:
1、專屬勘誤交流論壇(Swift中文幫):http://swift.muzining.com/
2、QQ群(Swift快速入門(mén)書(shū)友會(huì)):259152129
內(nèi)容提要
《Swift語(yǔ)言快速入門(mén)》以蘋(píng)果官方Swift英文文檔為基礎(chǔ),以其大綱為主線,從易到難全面闡述了Swift語(yǔ)言的語(yǔ)言基礎(chǔ)、基本運(yùn)算、字符串操作、集合類型、流程控制、函數(shù)與閉包、面向?qū)ο蟆⒏呒?jí)運(yùn)算符操作及語(yǔ)法參考等方方面面。此外,《Swift語(yǔ)言快速入門(mén)》內(nèi)容及API已與蘋(píng)果官方英文文檔同步更新,減少了初學(xué)者學(xué)習(xí)舊版語(yǔ)言文檔卻不能正常編譯代碼的困惑。
《Swift語(yǔ)言快速入門(mén)》涵蓋面廣,內(nèi)容全面,不僅適合于Swift語(yǔ)言的初學(xué)者,有一定iOS編程經(jīng)驗(yàn)的開(kāi)發(fā)者可以把它當(dāng)作案頭工具書(shū)。
目錄
第1章 馬斯堡游記???? 1
1.1? 買票??????? 1
1.2? 導(dǎo)游??????? 13
1.3? 飛碟??????? 22
1.4? 斗法??????? 23
1.5? 題詩(shī)??????? 27
第2章 Swift初見(jiàn)???????? 28
2.1? Hello World???? 28
2.2? 簡(jiǎn)單值?? 29
2.3? 控制流?? 30
2.4? 函數(shù)和閉包?? 33
2.5? 對(duì)象和類??????? 35
2.6? 枚舉和結(jié)構(gòu)?? 39
2.7? 協(xié)議和擴(kuò)展?? 42
2.8? 泛型??????? 43
第3章 語(yǔ)法入門(mén)????????? 45
3.1 基礎(chǔ)??????? 45
3.1.1 常量和變量???????? 45
3.1.2 注釋??? 48
3.1.3 分號(hào)??? 49
3.1.4 整數(shù)??? 49
3.1.5 浮點(diǎn)數(shù)???????? 50
3.1.6 類型安全和類型推斷???????? 50
3.1.7 數(shù)值字面量???????? 51
3.1.8 數(shù)值類型轉(zhuǎn)換??? 52
3.1.9 類型別名??? 53
3.1.10 布爾值???????? 54
3.1.11 元組??? 55
3.1.12 可選??? 56
3.1.13 斷言??? 60
3.2 基本運(yùn)算符?? 61
3.2.1 術(shù)語(yǔ)??? 61
3.2.2 賦值運(yùn)算符???????? 62
3.2.3 算術(shù)運(yùn)算符???????? 62
3.2.4 求余運(yùn)算符???????? 63
3.2.5 浮點(diǎn)數(shù)求余運(yùn)算符??? 64
3.2.6 自增和自減運(yùn)算符??? 64
3.2.7 單目負(fù)號(hào)運(yùn)算符???????? 65
3.2.8 單目正號(hào)運(yùn)算符???????? 65
3.2.9 復(fù)合賦值運(yùn)算符???????? 65
3.2.10 比較運(yùn)算符???????? 66
3.2.11 三目條件運(yùn)算符???????? 66
3.2.12? nil合并運(yùn)算符 67
3.2.13 區(qū)間運(yùn)算符???????? 68
3.2.14 邏輯運(yùn)算符???????? 69
3.3? 字符串與字符??????? 71
3.3.1 字符串字面量??? 72
3.3.2 初始化空字符串???????? 73
3.3.3 字符串可變性??? 73
3.3.4 字符串是值類型???????? 73
3.3.5 使用字符??? 74
3.3.6 連接字符串和字符??? 74
3.3.7 字符串插值???????? 75
3.3.8? Unicode??????? 75
3.3.9 計(jì)算字符數(shù)量??? 77
3.3.10 比較字符串???????? 78
3.4 集合類型??????? 79
3.4.1 集合的可變性??? 80
3.4.2 數(shù)組??? 80
3.4.3 字典??? 84
3.5? 流程流?? 89
3.5.1 for循環(huán)?????? 89
3.5.2 while循環(huán)?? 93
3.5.3 條件語(yǔ)句??? 96
3.5.4 控制轉(zhuǎn)移語(yǔ)句??? 103
3.6 函數(shù)??????? 108
3.6.1 函數(shù)的定義與調(diào)用??? 108
3.6.2 函數(shù)參數(shù)和返回值??? 110
3.6.3 函數(shù)參數(shù)名稱??? 113
3.6.4 函數(shù)類型??? 119
3.6.5 嵌套函數(shù)??? 122
3.7? 閉包??????? 122
3.7.1 閉包表達(dá)式???????? 123
3.7.2 尾隨閉包??? 126
3.7.3 值捕獲???????? 128
3.7.4 閉包是引用類型???????? 130
3.8 枚舉??????? 130
3.8.1? 枚舉語(yǔ)法??? 131
3.8.2 使用switch 語(yǔ)句匹配枚舉值?? 132
3.8.3 關(guān)聯(lián)值???????? 133
3.8.4 原始值???????? 135
3.9 類和結(jié)構(gòu)體?? 136
3.9.1 類和結(jié)構(gòu)體的對(duì)比??? 137
3.9.2 結(jié)構(gòu)體和枚舉是值類型??? 139
3.9.3 類是引用類型??? 141
3.9.4 類和結(jié)構(gòu)體的選擇??? 142
3.9.5? 字符串、數(shù)組及字典的賦值和復(fù)制行為???????? 143
第4章 初級(jí)語(yǔ)法????????? 144
4.1? 屬性??????? 144
4.1.1 存儲(chǔ)屬性??? 144
4.1.2 計(jì)算屬性??? 147
4.1.3 屬性監(jiān)察器???????? 149
4.1.4 全局變量和本地變量???????? 151
4.1.5 類型屬性??? 151
4.2 方法??????? 155
4.2.1 實(shí)例方法??? 155
4.2.2 類型方法??? 160
4.3 下標(biāo)??????? 163
4.3.1 下標(biāo)語(yǔ)法??? 163
4.3.2 下標(biāo)用法??? 164
4.3.3 下標(biāo)選項(xiàng)??? 164
4.4 繼承??????? 166
4.4.1 定義一個(gè)基類??? 167
4.4.2 子類生成??? 168
4.4.3 重寫(xiě)??? 169
4.4.4 防止重寫(xiě)??? 173
4.5 構(gòu)造??????? 173
4.5.1 存儲(chǔ)屬性的初始賦值???????? 173
4.5.2 自定義構(gòu)造???????? 174
4.5.3 默認(rèn)構(gòu)造器???????? 178
4.5.4 值類型的構(gòu)造器代理???????? 179
4.5.5 類的繼承和構(gòu)造???????? 180
4.5.6 通過(guò)閉包或函數(shù)來(lái)設(shè)置屬性的默認(rèn)值??? 190
4.6 析構(gòu)??????? 192
4.6.1 析構(gòu)原理??? 192
4.6.2 析構(gòu)實(shí)例??? 192
4.7 自動(dòng)引用計(jì)數(shù)??????? 194
4.7.1 ARC的工作原理???????? 195
4.7.2 ARC實(shí)踐???? 195
4.7.3 類實(shí)例間的強(qiáng)引用環(huán)???????? 196
4.7.4 解決類實(shí)例間的強(qiáng)引用環(huán)???????? 199
4.7.5 閉包產(chǎn)生的強(qiáng)引用環(huán)???????? 205
4.7.6 解決閉包產(chǎn)生的強(qiáng)引用環(huán)???????? 207
4.8 可選鏈?? 210
4.8.1 可選鏈替代可選強(qiáng)制解析???????? 210
4.8.2 為可選鏈定義模型類???????? 211
4.8.3 通過(guò)可選鏈獲取屬性???????? 213
4.8.4 通過(guò)可選鏈調(diào)用方法???????? 214
4.8.5 使用可選鏈獲取下標(biāo)???????? 214
4.8.6 連接多層鏈???????? 215
4.8.7 可選鏈中返回可選類型的方法???????? 216
4.9 類型轉(zhuǎn)換??????? 217
4.9.1 定義一個(gè)類層次作為例子???????? 217
4.9.2 類型檢查??? 218
4.9.3 向下轉(zhuǎn)換??? 219
4.9.4 Any和AnyObject的轉(zhuǎn)換?? 220
4.10 類型嵌套??????? 222
4.10.1 類型嵌套實(shí)踐??? 223
4.10.2 引用嵌套類型??? 224
第5章 高級(jí)語(yǔ)法????????? 225
5.1 擴(kuò)展??????? 225
5.1.1 擴(kuò)展語(yǔ)法??? 225
5.1.2 計(jì)算屬性??? 226
5.1.3 構(gòu)造器???????? 227
5.1.4 方法??? 228
5.1.5 可變實(shí)例方法??? 229
5.1.6 下標(biāo)??? 229
5.1.7 嵌套類型??? 230
5.2 協(xié)議??????? 231
5.2.1 協(xié)議語(yǔ)法??? 231
5.2.2 屬性要求??? 232
5.2.3 方法要求??? 233
5.2.4 可變方法要求??? 234
5.2.5 協(xié)議作為類型??? 235
5.2.6 集合中的協(xié)議類型??? 240
5.2.7 協(xié)議的繼承???????? 241
5.2.8 協(xié)議合成??? 242
5.2.9 檢查協(xié)議的一致性??? 243
5.2.10 可選協(xié)議要求??? 245
5.3? 泛型??????? 247
5.3.1 泛型解決的問(wèn)題???????? 247
5.3.2 泛型函數(shù)??? 248
5.3.3 類型參數(shù)??? 249
5.3.4 命名類型參數(shù)??? 249
5.3.5 泛型類型??? 250
5.3.6? 擴(kuò)展泛型類型??? 252
5.3.7 類型約束??? 253
5.3.8 關(guān)聯(lián)類型??? 256
5.3.9? where子句 258
5.4? 訪問(wèn)控制??????? 260
5.4.1? 模塊和源文件??? 261
5.4.2? 訪問(wèn)級(jí)別??? 261
5.4.3? 訪問(wèn)控制語(yǔ)法??? 262
5.4.4? 自定義類型???????? 263
5.4.5? 子類??? 265
5.4.6? 常量、變量、屬性和下標(biāo)???????? 266
5.4.7? 協(xié)議??? 268
5.4.8? 擴(kuò)展??? 269
5.5? 高級(jí)運(yùn)算符?? 269
5.5.1? 位運(yùn)算符??? 270
5.5.2? 溢出運(yùn)算符???????? 274
5.5.3? 優(yōu)先級(jí)和結(jié)合性???????? 276
5.5.4? 運(yùn)算符函數(shù)???????? 277
5.5.5? 前置和后置運(yùn)算符??? 278
5.5.6? 組合賦值運(yùn)算符???????? 279
5.5.7? 比較運(yùn)算符???????? 280
5.5.8? 自定義運(yùn)算符??? 280
5.5.9? 自定義中置運(yùn)算符的優(yōu)先級(jí)和結(jié)合性??? 281
第6章 詞法參考????????? 282
6.1? 關(guān)于詞法參考??????? 282
6.2? 詞法結(jié)構(gòu)??????? 283
6.2.1? 空白與注釋???????? 283
6.2.2? 標(biāo)識(shí)符???????? 283
6.2.3? 關(guān)鍵字和標(biāo)點(diǎn)符號(hào)??? 285
6.2.4? 字面量???????? 286
6.2.5? 運(yùn)算符???????? 290
6.3? 類型??????? 292
6.3.1? 類型標(biāo)注??? 292
6.3.2? 類型標(biāo)識(shí)符???????? 293
6.3.3? 元組類型??? 293
6.3.4? 函數(shù)類型??? 294
6.3.5? 數(shù)組類型??? 295
6.3.6? 字典類型??? 296
6.3.7? 可選類型??? 296
6.3.8? 隱式解析可選類型??? 297
6.3.9? 合成協(xié)議??? 298
6.3.10 元類型???????? 298
6.3.11 類型繼承語(yǔ)法??? 299
6.3.12 類型推斷??? 299
6.4? 表達(dá)式?? 300
6.4.1? 前綴表達(dá)式???????? 300
6.4.2? 二元表達(dá)式???????? 301
6.4.3? 賦值表達(dá)式???????? 303
6.4.4? 三元條件運(yùn)算符???????? 303
6.4.5? 類型轉(zhuǎn)換運(yùn)算符???????? 304
6.4.6? 主表達(dá)式??? 305
6.4.7? 后綴表達(dá)式???????? 310
6.5? 語(yǔ)句??????? 314
6.5.1? 循環(huán)語(yǔ)句??? 315
6.5.2? 分支語(yǔ)句??? 317
6.5.3? 帶標(biāo)簽的語(yǔ)句??? 320
6.5.4? 控制傳遞語(yǔ)句??? 321
6.6? 聲明??????? 322
6.6.1? 全局代碼??? 323
6.6.2? 代碼塊???????? 323
6.6.3? 導(dǎo)入聲明??? 324
6.6.4? 常量聲明??? 324
6.6.5? 變量聲明??? 325
6.6.6? 類和靜態(tài)變量屬性??? 327
6.6.7? 類型別名??? 328
6.6.8? 函數(shù)聲明??? 328
6.6.9? 枚舉聲明??? 332
6.6.10 結(jié)構(gòu)體聲明???????? 334
6.6.11 類聲明???????? 335
6.6.12 協(xié)議聲明??? 336
6.6.13 協(xié)議構(gòu)造器聲明???????? 338
6.6.14 協(xié)議下標(biāo)聲明??? 338
6.6.15 協(xié)議相關(guān)類型聲明??? 338
6.6.16 構(gòu)造器聲明???????? 339
6.6.17 析構(gòu)器聲明???????? 340
6.6.18 擴(kuò)展聲明??? 340
6.6.19 下標(biāo)聲明??? 341
6.6.20 運(yùn)算符聲明???????? 342
6.6.21 特征聲明修飾符???????? 343
6.6.22 訪問(wèn)控制級(jí)別??? 344
6.7? 特征??????? 345
6.7.1? 聲明特征??? 345
6.7.2? Interface Builder使用的聲明特征??? 348
6.7.3? 類型特征??? 348
6.8? 模式??????? 349
6.8.1? 通配符模式???????? 349
6.8.2? 標(biāo)識(shí)符模式???????? 350
6.8.3? 值綁定模式???????? 350
6.8.4? 元組模式??? 350
6.8.5? 枚舉用例模式??? 351
6.8.6? 類型轉(zhuǎn)換模式??? 352
6.8.7? 表達(dá)式模式???????? 352
6.9? 泛型形參和實(shí)參?? 353
6.9.1? 泛型形參子句??? 353
6.9.2? where 子句???????? 354
6.9.3? 泛型參數(shù)子句??? 355
6.10 語(yǔ)法總結(jié)??????? 356
6.10.1? 語(yǔ)句(Statements)??????? 356
6.10.2? 泛型形參與實(shí)參(Generic Parameter and Arguments)????? 358
6.10.3? 聲明(Declarations)????? 358
6.10.4? 模式(Patterns)??? 364
6.10.5? 特征(Attributes) 365
6.10.6? 表達(dá)式(Expression)???? 365
6.10.7? 詞法結(jié)構(gòu)(Lexical Structure)??????? 368
6.10.8? 類型(Types) 372
第7章 使用Cocoa框架與ObjC???????? 374
7.1? 基本設(shè)置??????? 374
7.1.1? 建立你的Swift環(huán)境? 374
7.1.2? 理解Swift的導(dǎo)入過(guò)程?????? 375
7.2? 與ObjC API交互??? 376
7.2.1? 初始化???????? 376
7.2.2? 訪問(wèn)屬性??? 377
7.2.3? 使用方法??? 377
7.2.4? id兼容性???? 378
7.2.5? 使用nil??????? 379
7.2.6? 擴(kuò)展??? 380
7.2.7? 閉包??? 381
7.2.8? 對(duì)象比較??? 381
7.2.9? Swift類型兼容性??????? 381
7.2.10? Objective-C選擇器?? 382
7.3? 以O(shè)bjC的行為寫(xiě)Swift 383
7.3.1? 繼承Objective-C的類???????? 383
7.3.2? 適配協(xié)議??? 384
7.3.3? 編寫(xiě)構(gòu)造器和析構(gòu)器???????? 384
7.3.4? 集成Interface Builder???????? 384
7.3.5? 指明屬性特性??? 386
7.3.6? 實(shí)現(xiàn)核心數(shù)據(jù)管理對(duì)象的子類???????? 386
7.4? 使用Cocoa數(shù)據(jù)類型??? 386
7.4.1? 字符串???????? 387
7.4.2? 數(shù)字??? 387
7.4.3? 集合類???????? 388
7.4.4? Foundation數(shù)據(jù)類型 390
7.4.5? Foundation函數(shù) 390
7.4.6? Core Foundation 390
7.5? 采用Cocoa設(shè)計(jì)模式??? 392
7.5.1? 委托??? 392
7.5.2? 錯(cuò)誤報(bào)告??? 392
7.5.3? 鍵值觀察??? 393
7.5.4? Target-Action?????? 394
7.5.5? 內(nèi)省??? 394
7.6? 與C API交互 395
7.6.1? 基本類型??? 395
7.6.2? 枚舉??? 396
7.6.3? 指針??? 397
7.6.4? 全局常量??? 401
7.6.5? 預(yù)處理指令???????? 401
7.7? 與ObjC混編? 402
7.7.1? 混編概述??? 402
7.7.2? 在同一個(gè)app target中進(jìn)行代碼導(dǎo)入????? 403
7.7.3? 在同一個(gè)framework target中導(dǎo)入代碼 404
7.7.4? 導(dǎo)入外部框架??? 405
7.7.5? 在Objective-C中使用Swift代碼?????? 406
7.7.6? product模式命名?????? 407
7.7.7? 故障排除和提醒???????? 407
7.8? 遷移ObjC代碼至Swift 408
7.8.1? 為你的Objective-C代碼遷移做好準(zhǔn)備??? 408
7.8.2? 遷移過(guò)程??? 408
7.8.3? 技巧和提示???????? 409
作者簡(jiǎn)介
陳少佳,現(xiàn)任極客學(xué)院布道師,負(fù)責(zé)教師團(tuán)隊(duì)建設(shè)、線上課程建設(shè)等工作。
2008年從業(yè)至今,曾任外企技術(shù)總監(jiān)、線下培訓(xùn)機(jī)構(gòu)學(xué)術(shù)總監(jiān)、副校長(zhǎng),培養(yǎng)過(guò)至少1000名月薪過(guò)萬(wàn)的Android、iOS開(kāi)發(fā)工程師。
李藝(網(wǎng)名:蝸牛君),蘇州人士,清華計(jì)算機(jī)碩士,極客學(xué)院Swift專家,木子寧工作室掌門(mén)。Adobe中國(guó)首批社區(qū)幫助管理員與版主,著名iOS獨(dú)立游戲開(kāi)發(fā)者,愛(ài)好書(shū)法、簫、吉他等,喜好郊游,偶爾會(huì)做義工。
博客地址:www.muzining.com
微博:weibo.com/angrymarble
媒體評(píng)論
Swift在保證性能的同時(shí)整合了很多現(xiàn)代的編程特性,對(duì)OS X和iOS開(kāi)發(fā)者來(lái)說(shuō)是重大的改進(jìn),也是以后的趨勢(shì)。本書(shū)很好地講解了Swift入門(mén)學(xué)習(xí)中各種實(shí)例、解決方案并配以詳盡的語(yǔ)言文檔,是開(kāi)發(fā)者學(xué)習(xí)Swift的必備書(shū)籍!
——馮斌 正點(diǎn)科技技術(shù)總監(jiān)
移動(dòng)互聯(lián)網(wǎng)時(shí)代,技術(shù)更新異常頻繁。僅守住所謂的扎實(shí)的“基本功”已跟不上時(shí)代的潮流,必須時(shí)刻緊跟最新技術(shù)。極客學(xué)院緊抓技術(shù)熱點(diǎn),并在第一時(shí)間將其奉獻(xiàn)給讀者,不管是網(wǎng)絡(luò)課程模式還是書(shū)籍形式,都是既追求實(shí)效性,又追求深度,真是讀者的福音。
——毛曉冬 高通中國(guó)資深研發(fā)經(jīng)理
極客學(xué)院的創(chuàng)業(yè)者們?cè)趪?guó)內(nèi)移動(dòng)端開(kāi)發(fā)技術(shù)領(lǐng)域經(jīng)營(yíng)多年,積累非常深厚,致力于技術(shù)的交流和傳承,培養(yǎng)出了不少優(yōu)秀的工程師。相信這本書(shū)同樣不會(huì)辜負(fù)各位開(kāi)發(fā)者的期望,值得大家期待!
——王鵬云 多盟技術(shù)副總裁
想學(xué)好一門(mén)編程語(yǔ)言要從選好書(shū)開(kāi)始!極客學(xué)院編著的好書(shū)值得您即刻購(gòu)買!
——謝耀輝 活動(dòng)行聯(lián)合創(chuàng)始人
Swift會(huì)真正改變iOS開(kāi)發(fā)生態(tài),現(xiàn)在大家在同一個(gè)起跑線上,立即出發(fā),開(kāi)啟Swift技術(shù)之旅吧。
——iceskysl 極客學(xué)院&eoe 聯(lián)合創(chuàng)始人
前言
Swift體會(huì)
極客學(xué)院首席講師 陳?ài)考?#xff08;ime)
?
?
我不算是一個(gè)果粉,但是我很喜歡蘋(píng)果的產(chǎn)品,甚至可以說(shuō)是狂熱。2014年6月2日晚上我一夜未眠,就是在等蘋(píng)果的WWDC,這是開(kāi)發(fā)者的狂歡之夜(或者狂歡之日,因?yàn)槊绹?guó)時(shí)間是白天)。凌晨1點(diǎn),終于開(kāi)始了,但是蘋(píng)果一次又一次的新產(chǎn)品展示讓我一次又一次的失望,作為開(kāi)發(fā)者的我表示無(wú)感。
我堅(jiān)持看因?yàn)槲也幌嘈盘O(píng)果總是讓我失望。最終在WWDC的最后一個(gè)環(huán)節(jié),我真心沸騰了,因?yàn)橐婚T(mén)新的編程語(yǔ)言——Swift出現(xiàn)了。要知道在飽受了Objective-C語(yǔ)言之苦后看見(jiàn)Swift是一種什么心情,你不需要再為引用計(jì)數(shù)而頭疼,不需要再為沒(méi)有命名空間而不得不添加該死的前綴而煩惱,不需要再為Objective-C那難懂的語(yǔ)法而整天暈乎乎的。此外,蘋(píng)果還為我們提供了Playground這個(gè)工具,它能夠在我們寫(xiě)程序時(shí)實(shí)時(shí)計(jì)算出變量的值,甚至還能呈現(xiàn)數(shù)字變量的趨勢(shì)圖,讓編程富有樂(lè)趣及創(chuàng)造性。
由于Swift出現(xiàn)得晚,所以它擁有了目前世界上幾乎所有編程語(yǔ)言的優(yōu)點(diǎn),而沒(méi)有目前所有編程語(yǔ)言的缺點(diǎn),Swift真的太漂亮了。下面我們開(kāi)始一步一步認(rèn)識(shí)它。
運(yùn)行速度
從蘋(píng)果官方給出的數(shù)據(jù)來(lái)看,Objective-C比Python快2.8倍,而Swift比Python快3.9倍,可見(jiàn)蘋(píng)果在Swift上下了大量的工夫進(jìn)行優(yōu)化。
開(kāi)發(fā)環(huán)境
Swift語(yǔ)言的開(kāi)發(fā)環(huán)境是蘋(píng)果公司提供的集成開(kāi)發(fā)環(huán)境Xcode,可以用來(lái)開(kāi)發(fā)iOS應(yīng)用、iOS游戲、OS X窗體程序、OS X游戲、OS X命令行程序,讀者可以直接從App Store中搜索并下載。用Swift語(yǔ)言可以做到幾乎所有Objective-C所能做到的事情,所以Swift必將取代Objective-C,如果你還沒(méi)有學(xué)過(guò)Objective-C語(yǔ)言,那么恭喜你,不用學(xué)了,直接學(xué)習(xí)Swift即可。
運(yùn)行環(huán)境
Swift被強(qiáng)大的llvm編譯成機(jī)器碼,直接運(yùn)行在系統(tǒng)中。由于Swift是蘋(píng)果的產(chǎn)品,所以目前只支持蘋(píng)果的系統(tǒng)(OS X和iOS)。我們期待會(huì)有社區(qū)開(kāi)發(fā)出跨平臺(tái)的Swift語(yǔ)言,因?yàn)檫@么好的一門(mén)編程語(yǔ)言,應(yīng)該能夠讓世界上的每一個(gè)人享受到才好,就像mono讓C#語(yǔ)言跨平臺(tái)一樣。
語(yǔ)言特性
具有所有現(xiàn)代編程語(yǔ)言的特性,包括:面向?qū)ο蟆㈩悢U(kuò)展、命名空間、閉包、泛型、強(qiáng)類型、函數(shù)有多個(gè)返回值等。
這些特性能夠大大提高程序員的開(kāi)發(fā)效率,從而為企業(yè)節(jié)約成本,同時(shí)讓編程工作充滿樂(lè)趣。
語(yǔ)法簡(jiǎn)介
通過(guò)前文的介紹,相信讀者已經(jīng)迫不及待地想嘗試使用Swift了,下面我們就來(lái)認(rèn)識(shí)一下Swift的語(yǔ)法。
簡(jiǎn)潔的語(yǔ)法
Swift拋棄了Objective-C那種古板難懂的語(yǔ)法,采用通俗易懂的腳本語(yǔ)言類語(yǔ)法,學(xué)過(guò)Python、JavaScript或者Lua語(yǔ)言的讀者肯定不會(huì)陌生,這大大降低了初學(xué)者的學(xué)習(xí)成本。
變量及常量
如果要定義一個(gè)變量i等于1,只需要寫(xiě)var i = 1,可以看出,不需要指定類型,因?yàn)镾wift會(huì)自動(dòng)做類型推斷。
如果要定義一個(gè)常量PI等于3.14,只需要寫(xiě)let PI = 3.14,常量只能被賦值一次。
輸出語(yǔ)句
在Swift中,可以直接使用println函數(shù)來(lái)輸出一段任意類型的信息,如下所示:
println("Hello Swift")
字符串連接
Swift語(yǔ)言中的字符串連接同樣也非常簡(jiǎn)單,如果兩個(gè)值都是字符串,則可直接用加號(hào)連接,如下所示:
var hello = "Hello"
var world = "World"
var str = hello + world
?
如果將要連接的值中有其他類型,則直接使用\()包括就可進(jìn)行連接,如下所示:
var hello = "Hello"
var num = 100
var str = "\(hello) \(num)"
?
從上面的示例可以看出,相比Objective-C或者C/C++語(yǔ)言來(lái)說(shuō),簡(jiǎn)單太多了。
循環(huán)
傳統(tǒng)的C語(yǔ)言中的for循環(huán)是這么寫(xiě)的:
for (int i = 0; i < 100; i++) {
??? //TODO
}
?
在Swift中,將循環(huán)大大簡(jiǎn)化了,如下所示:
for i in 0..<100{
??? //TODO
}
?
具體內(nèi)容還有很多,詳見(jiàn)本書(shū)正文。
條件判斷
條件判斷與C語(yǔ)言并沒(méi)有區(qū)別,可以直接書(shū)寫(xiě)C語(yǔ)言的語(yǔ)法即可通過(guò),如下所示:
if (count>5) {
??? //TODO
}
?
在Swift中還可以再簡(jiǎn)潔一些,如下:
if count>5 {
??? //TODO
}
?
另外,在Swift語(yǔ)言中,switch…case語(yǔ)句可以不用加break關(guān)鍵字。
函數(shù)
如果要定義一個(gè)函數(shù)用來(lái)輸出一段信息,則代碼如下所示:
func sayHello(){
??? println("Hello Swift")
}
?
這種寫(xiě)法非常簡(jiǎn)潔,我曾在Dart語(yǔ)言中見(jiàn)過(guò)這種寫(xiě)法,func是一個(gè)關(guān)鍵字,用來(lái)指明所定義的是一個(gè)函數(shù),sayHello是函數(shù)名稱,()中是該函數(shù)的傳入?yún)?shù)。如果還想使用傳入?yún)?shù)及返回值,如下所示:
func max(a:Int,b:Int)->Int{
??? if a>b {
??????? return a
??? }else{
??????? return b
??? }
}
?
該函數(shù)名稱為max,可傳入兩個(gè)參數(shù),都是整數(shù)類型,參數(shù)名稱分別為a、b,函數(shù)的返回值也是整數(shù)類型。
Swift中的函數(shù)還可以同時(shí)返回多個(gè)值,如下所示:
func getNum()->(Int,Int){
??? return (3,4)
}
?
如果想對(duì)該函數(shù)進(jìn)行調(diào)用并獲取到這兩個(gè)返回結(jié)果值,則用法如下:
let (a,b) = getNum()
面向?qū)ο?/p>
類的定義非常簡(jiǎn)單,如下所示:
class Hello{
??? func sayHello(){
??????? println("Hello Swift")
??? }
}
?
該示例定義了一個(gè)名為Hello的類,其有一個(gè)成員函數(shù)名為sayHello,如果想調(diào)用該類及相應(yīng)函數(shù),則用法如下:
var h = Hello()
h.sayHello()
?
類的繼承的寫(xiě)法也非常簡(jiǎn)單,這一點(diǎn)繼承了C++語(yǔ)言的優(yōu)秀傳統(tǒng),如果想定義一個(gè)名為Hi的類繼承自Hello,則寫(xiě)法如下:
class Hi:Hello{
}
?
如果后期還想為某類添加功能,有兩種方法。第一種是直接修改類的源碼添加功能,第二種是為該類寫(xiě)擴(kuò)展功能,下面我們來(lái)著重介紹第二種。如果想為Hello類再添加一個(gè)名為sayHi的方法,則代碼如下所示:
extension Hello{
??? func sayHi(){
??????? println("Hi Swift")
??? }
}
?
其中,extension關(guān)鍵字表示要擴(kuò)展已經(jīng)存在的類的功能,如果想擴(kuò)展系統(tǒng)或者第三方的某個(gè)類的功能而得不到其源碼時(shí),采用這種方式將會(huì)是一個(gè)絕佳的選擇。如下所示:
extension String{
??? func printSelf(){
??????? println(self)
??? }
}
var str = "Hello Swift"
str.printSelf()
?
通過(guò)這種方式擴(kuò)展了系統(tǒng)的String類,為其增加了一個(gè)printSelf()方法,在使用時(shí)可直接調(diào)用目標(biāo)對(duì)象的printSelf()方法,非常方便。
關(guān)于面向?qū)ο蟮母嗵匦?#xff0c;請(qǐng)看本書(shū)正文。
其實(shí)extension還有另一個(gè)用途,那就是模擬命名空間,請(qǐng)看下一個(gè)主題。
命名空間
在Swift語(yǔ)言中并沒(méi)有專門(mén)的命名空間的關(guān)鍵字,但是可以模擬命名空間這個(gè)面向?qū)ο蟮奶匦?#xff0c;如下所示:
//定義命名空間ime
class ime{
}
?
//在ime命名空間下定義Hello類
extension ime{
??? class Hello{
??????? func sayHello(){
??????????? println("Hello Swift")
??????? }
??? }
}
?
使用該類及相關(guān)方法的代碼如下所示:
var h = ime.Hello()
h.sayHello()
?
有沒(méi)有讓你眼前一亮的感覺(jué)呢?
結(jié)尾
就寫(xiě)到這里吧,想必大家已經(jīng)對(duì)Swift有了一個(gè)初步的了解,而且迫不及待地想開(kāi)始學(xué)習(xí)了,努力吧,少年,你就是未來(lái)的太陽(yáng)!
?
總結(jié)
以上是生活随笔為你收集整理的Swift语言快速入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: leveldb学习
- 下一篇: Linux系统下UDP发送和接收广播消息
