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