在本書中,著名編程圖書作者Erica Sadun介紹了有效的策略和即時可用的Swift代碼來應(yīng)對日常開發(fā)所面臨的挑戰(zhàn)。 在Erica Sadun編寫的所有編程暢銷書中, Swift開發(fā)秘籍 將現(xiàn)代的最佳實(shí)踐轉(zhuǎn)換為幾十個行之有效、方便適用的解決方案。本書的代碼示例是針對開發(fā)人員遇到的現(xiàn)實(shí)問題而創(chuàng)建的,以反映Swift的最新功能和最佳實(shí)踐。每章都將相關(guān)任務(wù)組織在一起。讀者可以直接跳轉(zhuǎn)到所需的解決方案,而不必先確定正確的類或框架。 本書涵蓋了Swift開發(fā)的關(guān)鍵概念,展示了如何編寫健壯且高效的代碼,并幫助讀者避免其他開發(fā)人員經(jīng)常遇到的陷阱。書中為使用這一功能強(qiáng)大的語言提供了一些權(quán)威的策略,并考慮了Swift的快速更新和版本遷移工具。 你可能正在從Objective-C語言、從Swift語言的舊版本或者從非蘋果語言遷移到現(xiàn)代的Swift語言,本書將有助于你掌握“如何”以及“為什么”進(jìn)行有效的Swift開發(fā)。企業(yè)招聘人員正在尋找能解決實(shí)際問題并能開發(fā)有效工作代碼的Swift開發(fā)人員。有了這本書,就可以準(zhǔn)備啟航了。
清華移動開發(fā)經(jīng)典叢書
Swift入門經(jīng)典
暢銷書作者Erica Sadun 全新作品
教會你進(jìn)行有效的Swift開發(fā)
源代碼免費(fèi)下載
雖然Swift編程語言已經(jīng)問世一年多了,但該語言仍在不斷地發(fā)展和演變。編寫一本有關(guān)尚未穩(wěn)定的編程語言的書籍,似乎有些令人可笑,但這正是本書所要做的事情。Swift雖然還在不停地變化,但它已不是新生兒。Swift并不知道Apple開發(fā)者預(yù)期的目的是什么。作為現(xiàn)代類型安全的語言,Swift已經(jīng)確定了其基本法則,具體細(xì)節(jié)的實(shí)現(xiàn)就只能交給時間來解決了。
Swift讓編程變得簡單而快樂。它的結(jié)構(gòu)和庫呈現(xiàn)了嶄新的方法,以便組織代碼和處理數(shù)據(jù),并執(zhí)行無休止的日常任務(wù)。從面向協(xié)議和函數(shù)編程到優(yōu)秀的閉包和代數(shù)數(shù)據(jù)類型,Swift提供了一種新的且令人興奮的編程方式。使用Swift開發(fā)的時間越長,就越難回到之前的舊語言,因?yàn)榕f語言中沒有提供這些屬于Swift的強(qiáng)大特性。
本書與傳統(tǒng)的教程有所不同。無論你是否有編程經(jīng)驗(yàn),如果希望將現(xiàn)有的能力提升到一個新的高度,那么本書就是為你而寫的。書中的每個重點(diǎn)章節(jié)都涵蓋了實(shí)用技能。這些章節(jié)會指引你掌握Swift,并完成其中的基本開發(fā)任務(wù)。你不必從頭到尾閱讀本書(盡管你很喜歡這樣做),而可以直接深入到你想學(xué)習(xí)的任何話題中,從討論中獲取你要學(xué)習(xí)的內(nèi)容。
本書在筆者的工作中被視為一個令人振奮的項(xiàng)目。希望你能像我喜歡寫本書一樣喜歡閱讀本書。
本書的組織結(jié)構(gòu)
本書提供了一個實(shí)用的Swift開發(fā)專題調(diào)查。以下是本書各章的內(nèi)容:
第1章,“歡迎使用Swift”——該章探討如何使用Swift這種現(xiàn)代類型安全的編程語言來構(gòu)建應(yīng)用。在工作中使用不斷變化的新語言并不總是一帆風(fēng)順。自從蘋果公司推出Swift語言之后,該語言一直都在更新。從一個個beta版的發(fā)布到一個個release版的發(fā)布,這意味著一些新功能和新語法可能在下一個版本發(fā)布時就不再使用了。該章介紹了學(xué)習(xí)一種不斷發(fā)展的語言意味著什么,以及如何在語言更新的同時移植代碼。
第2章,“打印與映射”——雖然編程是使用代碼構(gòu)建組件,但要牢記代碼最終是為開發(fā)者和用戶服務(wù)的。代碼不僅僅需要編譯,還應(yīng)易于理解、上下連貫并且高效執(zhí)行。該章討論所有范圍內(nèi)的輸出場景,從面向用戶的寫操作到面向開發(fā)者的調(diào)試支持。該章除了總結(jié)這些技術(shù)外,還探討如何準(zhǔn)確地建立反饋和文檔并根據(jù)開發(fā)和調(diào)試需求輸出相應(yīng)內(nèi)容。
第3章,“可選類型?!”——不像其他語言那樣,Swift中的nil并不是指針。可以使用nil來安全地表示結(jié)構(gòu)中潛在的有效或無效值。學(xué)習(xí)如何識別和使用可選類型是掌握Swift語言的重要一步。該章介紹了可選類型,為了檢測nil支持的結(jié)構(gòu),需要在代碼中創(chuàng)建、測試并成功地使用可選類型。
第4章,“閉包和函數(shù)”——閉包語法為方法、函數(shù)和“塊”參數(shù)提供了基礎(chǔ),所有這些參數(shù)都是開發(fā)Swift應(yīng)用的基礎(chǔ)。通過封裝狀態(tài)和功能,促使了優(yōu)秀結(jié)構(gòu)的形成。該章討論了閉包,展示了閉包在Swift中的工作方式以及如何更好地將其納入應(yīng)用中。
第5章,“泛型和協(xié)議”——泛型有助于構(gòu)建健壯的代碼,用以擴(kuò)展單一類型之外的功能。泛型實(shí)現(xiàn)服務(wù)于一組數(shù)據(jù)類型,而不是某一種特定的數(shù)據(jù)類型。泛型類型和協(xié)議(行為合約)的組合,建立了強(qiáng)大而靈活的編程組合。該章介紹了這些概念,并且探討了如何掌握那些在版本更新中經(jīng)常令人迷惑的部分。
第6章,“錯誤”—— Swift中的“錯誤”和其他編程語言中一樣,表示失敗的事情。在日常開發(fā)任務(wù)中,你會遇到邏輯錯誤,即能正常編譯運(yùn)行,但無法達(dá)到預(yù)期效果。有時還會遇到由現(xiàn)實(shí)條件而產(chǎn)生的運(yùn)行時錯誤,如缺少資源或訪問了不可用的服務(wù)。Swift反饋機(jī)制包括斷言導(dǎo)致的致命錯誤和支持恢復(fù)的錯誤類型,它們可以幫助定位問題,并提供運(yùn)行時的解決方案。該章介紹“錯誤”,并幫助你了解如何處理各種故障。
第7章,“類型”——當(dāng)提到類型時,Swift提供了三個不同尋常的類型系列。Swift的類型系統(tǒng)包括類(提供引用類型)、枚舉和結(jié)構(gòu)體(二者都為代數(shù)值類型)。為支持開發(fā),每種類型都有獨(dú)特的優(yōu)勢和功能。該章總結(jié)了Swift語言中常用的關(guān)鍵概念,并探討了應(yīng)用中類型的工作方式。
第8章,“雜記”——Swift是一種充滿活力且正在不斷發(fā)展的語言,在單一的框架內(nèi)許多功能并不總是適用。該章介紹了一系列主題,雖然這些主題在本書找不到合適的對應(yīng)章節(jié),但仍然值得關(guān)注。
關(guān)于示例代碼
在開源代碼托管網(wǎng)站GitHub上可以找到本書的源碼,網(wǎng)址為https://github.com/erica/ SwiftCookbook。在該網(wǎng)站上可以找到每章的源代碼,其中涵蓋了本書的所有示例。
可以使用git工具克隆整個倉庫或者單擊GitHub上的Download按鈕來獲取示例代碼。在本書編寫時,Download按鈕位于網(wǎng)頁右邊中心位置。通過下載ZIP歸檔文件能夠獲取整個倉庫。
本書中文支持網(wǎng)站www.tupwk.com.cn/downpage上也提供了各章的源代碼。
貢獻(xiàn)
示例代碼從來沒有固定版本。它將隨著蘋果公司對Swift語言的更新繼續(xù)演化。通過對bug提出修復(fù)和糾正建議以及通過擴(kuò)展示例代碼可以參與其中。GitHub允許你創(chuàng)建分支并添加自己的東西,最后合并到主分支進(jìn)行分享。如果你想出了新點(diǎn)子或新方法,請告訴我。
了解GitHub
GitHub(http://github.com)是最大的Git托管網(wǎng)站,其中包含超過150000個公共庫。它提供免費(fèi)托管的公共項(xiàng)目和付費(fèi)托管的私有項(xiàng)目。它有一個自定義的Web界面,其中包括維基托管、問題跟蹤,重要的是它還包括項(xiàng)目開發(fā)者的社交網(wǎng)絡(luò),這是尋找新代碼或查找現(xiàn)有庫的好地方。在GitHub網(wǎng)站上注冊一個免費(fèi)賬戶,然后才能復(fù)制和修改這些公有庫或創(chuàng)建自己的開源iOS項(xiàng)目,以與他人分享。
聯(lián)系作者
如果有關(guān)于本書的任何意見或問題,請給我發(fā)電子郵件到erica@ericasadun.com,或者在GitHub上給我留言。
Erica Sadun是一位暢銷書作家,是幾十本關(guān)于編程和其他技術(shù)主題書籍的編著者和貢獻(xiàn)者。在蘋果開發(fā)領(lǐng)域,她是世界上最受人尊敬的專家之一,她的新作包括《iOS Auto Layout開發(fā)秘籍(第2版)》等圖書。她還是十幾個原生iPhone應(yīng)用的作者,并且在TUAW.com、O'Reilly's Mac Devcenter、Lifehacker和Ars Technica上都擁有自己的博客。Erica Sadun擁有美國佐治亞理工學(xué)院的圖形、可視化和可用性中心(Georgia Tech's Graphics, Visualization and Usability Center)的計(jì)算機(jī)科學(xué)博士學(xué)位。
第1章 歡迎使用Swift 1
1.1 代碼遷移 2
1.1.1 如何遷移 2
1.1.2 遷移課程 3
1.2 使用Swift 4
1.2.1 編譯應(yīng)用 4
1.2.2 框架和庫 5
1.2.3 腳本 6
1.2.4 REPL 6
1.2.5 Playground 7
1.2.6 其他 8
1.3 學(xué)習(xí)Swift 8
1.4 小結(jié) 9
第2章 打印與映射 11
2.1 基礎(chǔ)打印 11
2.1.1 打印多個條目 12
2.1.2 添加條目分隔符 13
2.1.3 字符串插值 13
2.1.4 控制換行符 14
2.2 秘訣:打印自定義目標(biāo) 16
2.2.1 打印字符串 16
2.2.2 打印自定義輸出流 17
2.3 秘訣:打印和字符串格式化19
2.3.1 Swift和格式說明符 20
2.3.2 格式化的局限性 20
2.3.3 條件編譯 21
2.4 調(diào)試打印 22
2.5 秘訣:后綴打印 24
2.6 快速查找 25
2.6.1 Quick Look for Custom Types 25
2.6.2 Playground中的Quick Look for Custom Types 26
2.6.3 Playground Quick Looks 26
2.6.4 為Playground創(chuàng)建自定義Quick Look 27
2.6.5 內(nèi)置Quick Look類型 28
2.6.6 第三方渲染 29
2.7 使用Dump函數(shù) 30
2.8 構(gòu)建自定義映射 31
2.8.1 遞歸映射 33
2.8.2 使用協(xié)議一致性構(gòu)建
基本映射描述 33
2.9 添加標(biāo)題文檔 35
2.9.1 構(gòu)建標(biāo)題文檔 36
2.9.2 Markdown支持 36
2.9.3 關(guān)鍵字 37
2.9.4 特殊的Swift關(guān)注點(diǎn) 39
2.9.5 為標(biāo)題文檔添加圖像 40
2.10 小結(jié) 41
第3章 可選類型?! 43
3.1 可選類型初步 43
3.2 展開可選值(UnwrappingOptionals) 45
3.2.1 強(qiáng)制展開 45
3.2.2 條件綁定 45
3.2.3 條件綁定和類型轉(zhuǎn)換 46
3.2.4 級聯(lián)綁定 48
3.2.5 guard語句 49
3.2.6 可選值的隱式展開 50
3.2.7 保護(hù)failable初始化器 52
3.2.8 可選值和哨兵值 53
3.2.9 合并 55
3.2.10 可選賦值 55
3.2.11 可選模式 56
3.3 可選鏈 58
3.3.1 選擇器測試和可選鏈 60
3.3.2 下標(biāo) 61
3.4 可選映射 61
3.4.1 映射和鏈 62
3.4.2 使用flatMap過濾nil值 62
3.5 非托管包裝器 63
3.6 小結(jié) 64
第4章 閉包和函數(shù) 67
4.1 創(chuàng)建函數(shù) 67
4.1.1 參數(shù)名 68
4.1.2 標(biāo)簽約定 68
4.1.3 方法和函數(shù)的命名 70
4.1.4 外部和局部參數(shù) 71
4.1.5 默認(rèn)參數(shù) 71
4.1.6 常量和變量參數(shù) 73
4.1.7 修改參數(shù) 74
4.2 閉包和函數(shù) 75
4.2.1 函數(shù)類型 75
4.2.2 使用元組實(shí)參 76
4.2.3 使用實(shí)參名縮寫 77
4.2.4 推斷閉包類型 78
4.2.5 參數(shù)類型推斷 80
4.2.6 聲明類型別名 80
4.2.7 嵌套函數(shù) 81
4.3 元組 83
4.3.1 將元組轉(zhuǎn)換成結(jié)構(gòu)體 84
4.3.2 元組返回類型 85
4.4 可變參數(shù) 86
4.5 捕獲值 87
4.6 Autoclosure 90
4.7 柯里化(Currying)94
4.7.1 柯里化的原因 95
4.7.2 構(gòu)建庫 95
4.7.3 局部應(yīng)用 97
4.7.4 柯里化的成本 97
4.7.5 柯里化和回調(diào) 97
4.7.6 柯里化實(shí)踐 99
4.8 將閉包傳遞給函數(shù)參數(shù)100
4.9 小結(jié) 103
第5章 泛型和協(xié)議 105
5.1 詳述泛型 105
5.1.1 協(xié)議 106
5.1.2 標(biāo)記 107
5.1.3 類型約束 108
5.2 采用協(xié)議 108
5.2.1 聲明協(xié)議 109
5.2.2 成員聲明 111
5.2.3 構(gòu)建基本協(xié)議 113
5.2.4 添加協(xié)議的默認(rèn)實(shí)現(xiàn) 114
5.2.5 可選的協(xié)議要求 116
5.2.6 Swift原生的可選協(xié)議要求 116
5.3 構(gòu)建泛型類型 117
5.4 泛型要求 119
5.4.1 一致性要求 119
5.4.2 秘訣:相同類型要求 120
5.4.3 泛型美化 121
5.4.4 合法的標(biāo)記 122
5.4.5 匹配別名 123
5.4.6 協(xié)議別名的默認(rèn)值 123
5.4.7 關(guān)聯(lián)類型總結(jié) 124
5.5 擴(kuò)展泛型類型 125
5.6 使用協(xié)議類型 126
5.6.1 基于協(xié)議的集合 126
5.6.2 Self要求 126
5.6.3 協(xié)議對象和Self要求 128
5.7 利用協(xié)議 129
5.8 小結(jié) 129
第6章 錯誤 131
6.1 冷酷無情的失敗 131
6.1.1 致命錯誤 132
6.1.2 斷言 132
6.1.3 先決條件 133
6.1.4 中斷和退出 134
6.2 優(yōu)雅地失敗 134
6.2.1 ErrorType協(xié)議 134
6.2.2 在可選項(xiàng)和錯誤處理之間做出選擇 136
6.3 Swift的錯誤規(guī)則 136
6.3.1 規(guī)則1:遠(yuǎn)離nil哨兵 136
6.3.2 規(guī)則2:使用throw拋出錯誤 138
6.3.3 規(guī)則3:使用帶有可見訪問的錯誤類型 139
6.3.4 規(guī)則4:使用throws來標(biāo)記所有錯誤參與的方法 139
6.3.5 規(guī)則5:堅(jiān)持使用rethrows 140
6.3.6 規(guī)則6:消耗錯誤是很重要的 141
6.3.7 規(guī)則7:終止線程的錯誤鏈 141
6.4 構(gòu)建錯誤 143
6.4.1 良好的錯誤 144
6.4.2 為錯誤命名 144
6.5 添加字符串描述 145
6.5.1 添加原因 145
6.5.2 簡化輸出 146
6.5.3 擴(kuò)展字符串 147
6.5.4 類型特定的錯誤 147
6.6 獲取上下文 147
6.6.1 將字符串置于上下文中研究 148
6.6.2 將拋出類型置于上下文中研究 149
6.6.3 簡化上下文 151
6.7 調(diào)用拋出函數(shù) 152
6.7.1 使用try 152
6.7.2 錯誤傳播 153
6.7.3 使用 try! 154
6.7.4 使用 try? 155
6.8 為try?實(shí)現(xiàn)替代方法 156
6.8.1 謹(jǐn)慎使用結(jié)果 158
6.8.2 構(gòu)建try?的打印版本 158
6.9 使用guard和defer 159
6.10 小結(jié) 160
第7章 類型 161
7.1 語言概念 161
7.1.1 引用類型和值類型 161
7.1.2 復(fù)制與回寫 163
7.1.3 代數(shù)數(shù)據(jù)類型 164
7.1.4 其他術(shù)語 164
7.2 枚舉 165
7.2.1 基本枚舉 166
7.2.2 使用哈希值來支持區(qū)間 166
7.2.3 原始值枚舉 168
7.2.4 原始值成員和序列 169
7.2.5 關(guān)聯(lián)值 171
7.2.6 間接值 172
7.3 switch語句 173
7.3.1 分支 173
7.3.2 中斷 174
7.3.3 fallthrough 174
7.3.4 復(fù)雜的case 176
7.3.5 元組 176
7.3.6 值綁定的模式匹配 177
7.3.7 where子句 177
7.3.8 展開可選的枚舉 178
7.4 通過類型嵌入值 179
7.5 選項(xiàng)集 182
7.5.1 重溫 NS_OPTIONS 182
7.5.2 構(gòu)建枚舉 183
7.5.3 構(gòu)建選項(xiàng)集 184
7.5.4 查看選項(xiàng) 184
7.6 類 185
7.6.1 優(yōu)化 186
7.6.2 初始化器 186
7.6.3 初始化步驟 187
7.6.4 指定初始化器和便利初始化器 187
7.6.5 初始化器規(guī)則 187
7.6.6 構(gòu)建便利初始化器 188
7.6.7 可失敗初始化器和拋出初始化器 189
7.6.8 析構(gòu)器 191
7.7 屬性觀察器 192
7.8 擴(kuò)展和重寫 194
7.9 惰性求值 196
7.9.1 惰性序列 196
7.9.2 惰性屬性 196
7.10 小結(jié) 197
第8章 雜記 199
8.1 聲明標(biāo)簽 199
8.2 自定義運(yùn)算符 201
8.2.1 聲明運(yùn)算符 201
8.2.2 運(yùn)算符的一致性 202
8.2.3 對運(yùn)算符的取舍進(jìn)行評估 203
8.3 數(shù)組的索引 203
8.3.1 多索引的數(shù)組訪問 204
8.3.2 封裝索引 206
8.3.3 數(shù)組切片 206
8.4 泛型下標(biāo) 207
8.5 字符串工具 209
8.5.1 重復(fù)元素初始化器 209
8.5.2 字符串和基數(shù) 209
8.5.3 字符串區(qū)間 211
8.5.4 字符串分割 212
8.5.5 字符串下標(biāo)213
8.5.6 與Foundation的互操作 214
8.5.7 連接與擴(kuò)展 214
8.6 序列生成器 215
8.7 小結(jié) 217
顯示部分信息