-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Swift:面向協議編程

( 簡體 字)
作者:陳剛類別:1. -> 程式設計 -> 手機程式 -> Swift
譯者:
出版社:電子工業出版社Swift:面向協議編程 3dWoo書號: 45713
詢問書籍請說出此書號!

缺書
NT售價: 325

出版日:1/1/2017
頁數:324
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121301957
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

推薦序
很高興因為認識陳剛這位優秀的朋友,有幸讓自己的文字能夠呈現在讀者面前,每一個字都
顯得很珍貴。
這是一本介紹 Swift 語言的書。說起編程語言,這些年也廣泛地涉獵過諸多語言。從初中時
開始接觸 VB,寫一些小程序,然后發送給朋友們。那時的 VB 看起來就像數學公式一樣。現在
回頭一看,可視化的界面編輯也正像 Xcode 的 Interface Builder 一樣。到后來接觸了算法競賽,
開始寫一些Pascal,告別了圖形化界面,在 Turbo Pascal 的藍屏背景下寫一些begin、end、readln、
writeln。后來去外面參加競賽,考卷有三種語言選擇:Pascal、C、C++。當大部分人用 Pascal 的
時候,有少數幾個人用 C、C++考試,而監考老師發卷到他們那里的時候也會說好厲害。于是潛
意識中,覺得 C、C++ 是比 Pascal 更加厲害的語言。于是學了一年Pascal 的我再度歸零,拿起
了譚浩強老師編寫的《C 程序設計》。C 語言讓我感覺很簡潔,同時接觸了指針、內存管理、字
符串庫。比起 Pascal,C 代碼讓我覺得是那樣簡潔、優雅。每一個字符都有它的力量,無法去掉、
無法再簡潔了。用它來寫深度搜索、圖論、二叉樹算法,然后去在線評測系統提交代碼,再優化
優化,接著代碼效率能上排名榜的第一頁,是一個15 歲少年所能期待的最美好的事情。
接著讀起了劉汝佳前輩的《算法競賽入門經典》一書,感慨語言之上,還能實現那么多算法,
解決一個又一個的問題。就像這本書一樣,前面的語言章節僅是鋪墊,后面的 iOS 開發章節才是
高潮。精通一門語言,然后用它去開發各種燦爛的iOS 應用,才是高潮。
算法陪我度過了高中。高考之后,我讀了《黑客與畫家》一書,對 Lisp 語言崇拜不已,于
是就學了 Lisp。在2013 年到 2015 年,又陸續學了 Java、Clojure、JavaScript、Objective-C 和
Swift。
IV Swift:面向協議編程
后來創業做 Reviewcode.cn,又學了PHP、 CSS 和 HTML。開始更多地知道后端系統里,
語言起著怎樣的作用。后來到了新公司,擔任 Go 后端工程師。又在一個星期內學了 Go,并用
它做了搶/發紅包、充值的 API 接口,協調移動端同時上線了。
當用過很多語言后,你會發現很容易上手一門新語言,并快速用來干活。最近我也重新起航
創業了,創立了趣直播——一個知識直播平臺,孫源Sunny、iOS 程序猿都來直播過,可到我們的
公眾號“平方根平臺”來看看,也可加我的微信“lzwjava”來交流產品或技術。
初識Swift 的原因是公司準備把 Objective-C 示例應用用Swift 重寫。重寫是件挺無聊的事情,
于是只重寫了覺得有趣的部分,其他代碼都用GitHub 上的Objective-C 轉 Swift 的程序先轉一遍,
然后再去修復。將Objective-C 自動轉成Swift,在Swift 1.0 版本時還很好用,不用修復。可惜我
當時用的時候,已經是Swift 1.2 版本了。算是給本書提供了一個 Swift 語法多變的真實例子吧。
后來用 Swift 做了微圖項目,旨在模仿國外的 imgur,展示互聯網上最熱門的圖,接觸到了
extension、protocal、enum。再后來嘗試用 Swift 寫了一個 HTML Parser,比如從一大堆 HTML
中解析 class="btn-blue" 的 div 出來, 從而對 Swift 字符串處理、錯誤處理、
AnyObject 有了更深入的了解。
Swift 中的 map、flatMap、filter,這些是 Lisp 系語言函數的基礎,通常用它們來構造更高
階的函數。比如下面的clojure 代碼片段,從 map 中獲取 values 對應的keys:
(let [m {:x 1 :y 2 :z 3}
vset #{2 3}]
(map first (filter (comp vset last) m)))
;;=> (:y :z)
很高興 Swift 有這么多函數式的語法支持,函數式語言很擅長處理數據轉換,很優雅也很強
大,想想上面的幾行代碼用其他語言實現需要多寫多少代碼吧?
我是早前于 SwiftGG 的一次聚餐中認識作者陳剛兄的,后續時有交流。雖然不能經常見面,
但互相欣賞、惺惺相惜。希望未來有機會和陳剛兄一起共事。
本書通讀下來,不禁對陳剛兄做事的認真感到佩服。相信他能帶領大家進入 Swift 的世界,
掌控這門語言,寫出各種燦爛的應用!
——趣直播創始人 李智維

前言
眾所周知,在2015 年的 WWDC 上,蘋果發布了 Swift 語言的 2.0 版本,并且正式宣布 Swift
成為一門面向協議編程的語言。作為一個從 2014 年就開始接觸Swift 的程序員,我在當時已經
具備了一定的 Swift 面向對象編程經驗,這些經驗幫助我順利地完成了工程的更新;同樣,這些
經驗也讓我變得遲鈍。在 2.0 版本發布之初,面向協議編程這個名詞就好像一滴水滴入了大海中,
從我的關注中溜走了。好在我是個對知識充滿敬意的人,此后的數月中,我都在重點研究 WWDC
2015 的視頻資料,此時我才驚奇地發現,最初的那滴水變成了我心頭的驚濤駭浪,我開始不斷地
思考與探索面向協議編程的含義。
那么面向協議編程到底是什么呢?一句話就能概括:用協議擴展的方式代替繼承,實現代碼
復用。這個“代替”的影響是深遠的,協議擴展使得值類型在保持原有特性的同時,也能和引用
類型一樣實現代碼的復用。定長的值類型保存在棧內存上,值類型沒有引用計數、不會被“共享”、
只需用常數時間就能完成一次“復制”,等等,這些特性使得值類型相比引用類型擁有更快的讀
寫速度。同時,值類型的方法可以在編譯期進行“內聯”優化,更多的值類型意味著更大的優化
空間。Swift 不但通過協議擴展的方式填補了傳統面向對象編程語言中值類型代碼復用的鴻溝,同
時應用 Copy-on-Write 技術還可免于陷入“絕對復制”帶來的性能問題。在 Swift 的代碼世界中,
值類型得到了空前的解放。如果你正在使用 Swift 3.0 版本,那么你應該已經發現了,那些摘掉了
“NS”前綴的 Swift 原生對象,大部分都變成了值類型,毫無疑問,這種演變在后續的版本中還
會繼續進行下去。所以從內存的角度來看,面向協議編程正朝著面向棧內存編程的方向前進。
這本書誕生于我在重新研究 WWDC 2015 視頻的階段,我所編著的《Swift 開發手冊:技巧
與實戰》首印即將售罄,該書的責編安娜(也是本書的責編)與我商討重印的細節。受寫作時Swift
VI Swift:面向協議編程
版本的影響,《Swift 開發手冊:技巧與實戰》是一本面向對象編程的教材;所以在深思熟慮之后,
我決定放棄該書的重印,重新創作一本面向協議編程的教材,也就是你現在看到的《Swift:面向
協議編程》。在本書的創作過程中,我保留了舊作中的部分目錄和示例,加入了我對 WWDC 2015
以及 WWDC 2016 重新研究后的心得體會、個人在工作中的面向協議編程實戰經驗以及對編程模
式的思考。Swift 開源之后,除了可以在 iOS 平臺應用外,在其他平臺也有強勁表現,所以本書
的內容編排側重于語言本身及編程方式的思考,弱化了 iOS 開發的教學。由于本書的創作時間比
較久,所以主體內容是基于 Swift 2.2 版本創作的。在 Swift 3.0 版本發布之后,我第一時間投身
到新版本的學習中,在本書的第二次排版時加入了 Swift 3.0 的改動,力爭做到全面和準確。可以
預見,3.0 版本不會是 Swift 的最后一個版本,所以請讀者在學習時以當前的語言版本做參考。
最后感謝電子工業出版社的編輯安娜為本書所做的付出,多次合作我們已經建立了深厚友誼
與足夠的默契。感謝公司對我的信任,讓我如愿以償地成為了一名職業 iOS 開發者,獲得了很多
應用 Swift 的機會。感謝智維,創業辛苦仍不失對技術的熱情,在百忙中抽出時間幫我寫序,祝
趣直播越做越好。感謝幫我寫書評的王巍大神、InfoQ 主編徐川老師、還有圈內好友RxSwift 大神
小青和SwiftGG 翻譯組的前輩羊叔,你們的支持是我前進的動力,同時也感謝唐巧、付若愚和李
明杰三位老師的關注。感謝師父時永昌對我的關懷和指導,感謝和我合作開發第一個 Swift 項目
的同事楊帥以及同組的所有同事,感謝幫我糾錯的同事蒙朦,感謝共同學習進步的其他TStar 們(白
建國、薛剛、施潔、鄧飛)。
內容簡介:

Swift 2.0版本之后,Swift已經正式成為一門面向協議編程的語言,但無論是行業內的從業者還是行業外的初學者,對面向協議編程的概念都很陌生,因此本書的內容圍繞"面向協議編程”這一核心思想展開。第一章是IDE以及Swift歷史的簡單介紹,第二章涵蓋Swift的入門語法,第三章為Swift的進階語法,涉及函數式編程思想、面向協議編程的基礎理論以及Swift的內存優化,幫助讀者建立面向協議編程的意識。第四章為iOS開發快速入門,幫助初學者了解iOS開發中的MVC模式以及一些常用操作,希望讀者能通過實戰環節快速消化Swift語法。最后一章重點介紹Swift面向協議編程的工程細節。

目錄:

第1 章 搭建Swift 開發環境 ............ 1
1.1 Swift 介紹 .............. 1
1.1.1 Swift 的前世今生 ............ 1
1.1.2 Swift 與Objective-C ........... 3
1.2 Mac OS X 操作系統 ............ 3
1.3 Xcode 簡介和獲取方法 ............ 4
1.3.1 Xcode 簡介 ............ 4
1.3.2 playground 簡介 ............ 4
1.3.3 Xcode 的獲取方法 ............ 5
1.4 iPhone SDK 簡介 ............. 6
第2 章 Swift 基礎語法 .............. 7
2.1 基礎知識 .............. 7
2.1.1 命名規則 ............. 7
2.1.2 常量與變量............ 8
2.1.3 類型推測 ............. 9
2.1.4 注釋 ............. 10
2.1.5 輸出常量和變量 ............ 10
2.2 基本數據類型 .............. 12
2.2.1 整數 ............. 12
VIII Swift:面向協議編程
2.2.2 浮點數 ............. 12
2.2.3 布爾類型 ............. 12
2.2.4 元組類型 ............. 13
2.2.5 可選型 ............. 14
2.3 基本運算符 .............. 17
2.3.1 賦值運算符............ 17
2.3.2 數值運算 ............. 17
2.3.3 自增和自減運算 ............ 18
2.3.4 復合賦值 ............. 18
2.3.5 比較運算 ............. 18
2.3.6 三元運算符............ 19
2.3.7 邏輯運算符............ 19
2.3.8 范圍 ............. 20
2.3.9 括號優先級............ 20
2.4 字符串與字符 .............. 21
2.5 集合類型 .............. 25
2.5.1 數組 ............. 26
2.5.2 集合 ............. 29
2.5.3 字典 ............. 30
2.6 控制流 .............. 32
2.6.1 for 循環 .............. 32
2.6.2 while 循環 ............ 33
2.6.3 if 判斷語句 ............ 34
2.6.4 guard 判斷語句 ........... 34
2.6.5 switch 開關語句 ............ 35
2.7 函數................ 38
2.8 閉包................ 45
2.9 Swift 三杰——類、結構體、枚舉 .......... 48
2.9.1 Swift 三杰簡介 ............ 48
2.9.2 值引用與類型引用 ............ 49
2.9.3 類 ............... 50
2.9.4 結構體 ............. 51
2.9.5 枚舉 ............. 52
目錄 IX
2.10 屬性................ 54
2.10.1 存儲屬性 ............. 54
2.10.2 計算屬性 ............. 55
2.10.3 屬性觀察器............ 60
2.10.4 類型屬性 ............. 61
2.11 方法................ 62
2.12 下標................ 65
2.13 繼承................ 67
2.14 構造與析構 .............. 70
2.14.1 構造器 ............. 70
2.14.2 析構器 ............. 75
2.15 類型檢查與類型轉換 ............ 75
2.15.1 類型檢查 ............. 76
2.15.2 類型轉換 ............. 77
2.16 類型嵌套 .............. 78
2.17 擴展................ 79
2.17.1 擴展計算屬性 ............ 79
2.17.2 擴展構造器............ 80
2.17.3 擴展方法 ............. 81
2.17.4 擴展下標 ............. 81
2.18 協議................ 81
2.18.1 聲明協議 ............. 82
2.18.2 遵守協議 ............. 83
2.18.3 實現協議 ............. 84
2.18.4 實現擴展 ............. 84
2.18.5 協議擴展補充 ............ 87
2.18.6 協議的繼承............ 91
2.19 泛型................ 97
2.19.1 節點泛型 ............. 97
2.19.2 泛型協議 ............. 99
2.19.3 泛型對象 ............. 100
2.19.4 泛型方法 ............. 101
2.19.5 協議中的where 關鍵字 .......... 102
X Swift:面向協議編程
2.19.6 泛型特化 ............. 103
2.20 Swift 語法補充 ............ 104
2.20.1 斷言 ............. 104
2.20.2 precondition ............. 105
第3 章 Swift 進階語法 ............ 107
3.1 再談可選型 .............. 107
3.1.1 可選型 ............. 107
3.1.2 為什么要用可選型 ............ 108
3.1.3 解包可選型............ 109
3.1.4 可選綁定 ............. 110
3.1.5 可選鏈 ............. 111
3.1.6 可選型中的map 和flatMap ......... 113
3.1.7 Swift 中的錯誤處理 .......... 114
3.1.8 隱式解包 ............. 117
3.1.9 關于可選型的思考 ............ 118
3.2 同構與異構 .............. 119
3.2.1 數據源中的同構與異構 .......... 119
3.2.2 AnyObject/Any 簡介 ........... 122
3.2.3 AnyObject 的使用 ........... 123
3.2.4 AnyObject 與id 的對比 .......... 124
3.3 數組方法的探究 ............ 125
3.3.1 filter 方法 ............. 126
3.3.2 map 和flatMap 方法 ........... 126
3.3.3 reduce 方法 ............ 129
3.3.4 sort(sorted)方法 ............ 129
3.3.5 Side-Effect 與forEach 方法 .......... 130
3.3.6 contains 方法 ............. 132
3.3.7 indexOf(index(of:))方法 ......... 132
3.3.8 prefix、suffix 系方法 .......... 133
3.3.9 dropFirst、dropLast 方法 .......... 134
3.3.10 Slice ............. 135
3.3.11 RangeReplaceableCollectionType ......... 136
目錄 XI
3.3.12 數組的底層協議 ............ 136
3.3.13 帶下標的數組遍歷 .......... 138
3.3.14 Demo 演示 ............. 140
3.4 Objective-C 兼容性 ............. 142
3.4.1 類型橋接 ............. 142
3.4.2 OC 和Swift 的設計區別 .......... 144
3.5 Swift 內存管理 .............. 146
3.5.1 棧和堆 ............. 146
3.5.2 值類型和引用類型 ............ 146
3.5.3 Copy-on-Write ........... 154
3.5.4 利用引用類型的“共享” .......... 158
3.5.5 ARC(自動引用計數) ........... 161
3.5.6 循環引用 ............. 163
3.5.7 弱引用與無主引用 ............ 164
3.5.8 柯里化與方法參數中的閉包 .......... 166
3.5.9 @noescape 與@autoclosure .......... 169
3.5.10 靜態派發和動態派發 .......... 172
3.5.11 協議類型的存儲屬性 .......... 180
3.5.12 靜態多態與動態多態 .......... 183
3.5.13 泛型特化 ............. 185
3.5.14 小結 ............. 186
3.6 模式匹配 .............. 187
3.6.1 模式匹配簡介 ............ 187
3.6.2 枚舉的模式匹配 ............ 188
3.6.3 元組的模式匹配 ............ 189
3.6.4 if 和guard 中的模式匹配 ......... 191
3.6.5 for 中的模式匹配 ............ 192
3.6.6 模式匹配中的where 關鍵字 .......... 192
第4 章 iOS 開發入門 .............. 194
4.1 iOS 系統初探 .............. 194
4.1.1 核心OS(Core OS)層 .......... 195
4.1.2 核心服務(Core Services)層 ......... 195
XII Swift:面向協議編程
4.1.3 媒體(Media)層 ........... 195
4.1.4 Cocoa Touch 層 ........... 196
4.2 MVC 模式 ............. 196
4.2.1 MVC 簡介 ............. 196
4.2.2 iOS 中的MVC ............ 196
4.3 新建一個Swift 工程 ............. 198
4.4 認識Interface Builder ............ 202
4.5 構建計算器界面 ............ 205
4.5.1 使用對象庫中的對象 .......... 206
4.5.2 使用檢查器設置對象 .......... 207
4.5.3 嘗試運行程序 ............ 208
4.5.4 添加約束 ............. 210
4.5.5 關聯代碼 ............. 213
4.5.6 完善按鍵 ............. 218
4.6 實現計算器邏輯 ............ 220
4.6.1 補全鍵盤 ............. 220
4.6.2 給鍵盤添加約束 ............ 222
4.6.3 實現數字顯示功能 ............ 230
4.6.4 實現運算邏輯 ............ 232
4.7 修改計算器為MVC 模式 ........... 234
4.8 NSNotification ............. 238
4.8.1 NSNotification 簡介 .......... 238
4.8.2 addObserver 方法 ............ 240
4.8.3 addObserverForName 方法 ......... 243
4.8.4 postNotification 方法 ........... 243
4.8.5 Swift 3.0 中的Notification .......... 244
4.9 AutoLayout 快速入門 ........... 245
4.9.1 邊距與距離............ 245
4.9.2 中心與對齊............ 247
4.9.3 尺寸與比例............ 251
4.9.4 絕對位置與擠壓 ............ 252
目錄 XIII
第5 章 面向協議編程 .............. 256
5.1 繼承與組合 .............. 256
5.2 搭建頁面 .............. 261
5.3 創建storyboard 對應的子類 ........... 263
5.4 創建模型 .............. 265
5.5 串聯MVC ............. 268
5.6 MVVM ............... 272
5.7 圖解MVC 與MVVM ........... 274
5.8 MVC 面向協議化 ............ 276
5.9 MVC 多態優化 .............. 282
5.10 快速開發 .............. 287
5.11 組合.............. 297
5.12 交互.............. 303
5.13 搜索..............309
序: