老碼說編程之玩轉Swift江湖

老碼說編程之玩轉Swift江湖

《老碼說編程之玩轉Swift江湖 》由老碼團隊的5位資深IT工程師鑽研4個月學習整理和提煉而成,全書分為10個章節:

第1~2章講述如何搭建開發環境,講解XCode 6.1的用法;

第3~6章重點講述Swift的語法知識;第7章講解Swift和Objective-C之間的相互調用;

最後3章通過一個完整的案例“魔法盒子”來講解如何使用Swift語言從零開始開發一款商用的App。

本書在知識布局上不僅有對Swift基礎語法的講解,同時也對iOS開發過程中的眾多關鍵技術節點進行闡述,如庫管理工具Cocoapods、原型設計工具Axure Pro、雲端測試工具、Cordova/Phonegap HTML5 HyberApp的入門知識、真機調試、打包上傳等。我們旨在通過本書給讀者朋友們繪製一條我們走過且讀者朋友未來要走的路。本書被Swift社區的讀者們譽為“Swift世界的地圖”。

為了保證Swift語言的穩定和優良,蘋果公司先後為XCode 6推出了7個Beta版本,一個GM(Golden Master)版本,最後穩定於正式版XCode 6.1,本書是基於當前最新正式版編寫的。老碼團隊在編寫本書的同時,也在持續維護翻譯《The Swift Programming Language》官方文版。 《老碼說編程之玩轉Swift江湖》普遍採用詼諧、幽默、輕鬆的語言,力圖為讀者們創造一個輕鬆的學習氛圍,書中的案例緊貼社會熱點,比如老碼去藍翔、鍘美案、韓劇《繼承者們》、江湖武俠、楊過、小龍女、甚至網路紅人鳳姐、芙蓉等都會相繼出場,使大家在嬉笑怒罵間領悟Swift語言精髓和用法。

作者簡介

老碼團隊是由成都五位IT老工程師組成的致力於開源翻譯和Swift語言研究的學習組織,本書的是由該團隊的5位作者編寫。

王芳傑,網名Tyrion:

王芳傑-Tyrion 王芳傑-Tyrion

老碼團隊創始人兼負責人。就職於疊拓信息技術有限公司,擔任疊拓NGN中國人力資源培養經理;疊拓NGN中國售前經理;CSDN《程式設計師》雜誌管理版與技術版作家;CSDN CTO俱樂部會員;人才培養體系建設,非人力資源經理的人力資源管理等方面的專職講師;曾在東軟集團、Liquid Capital 中國擔任項目經理,有著紮實的技術功底。工作之餘痴迷於iOS App開發,有著豐富的移動網際網路創業經歷,致力於Swift、雲、虛擬化、大數據方面的研究與學習。

安秋雨,網名Robb:

安秋雨-Robb 安秋雨-Robb

老碼團隊成員,就職於疊拓信息技術有限公司,擔任Scrum Master,LTE技術專家。工作之餘痴迷於Linux核心的研究,在移動互聯領域致力於Android核心的深度最佳化,以及iOS App套用開發,有著豐富的移動互聯開發經歷,致力於Swift和雲技術的研究與學習。

秦平雷,網名Baelish:

秦平雷-Baelish 秦平雷-Baelish

老碼團隊成員。就職於疊拓信息技術有限公司,曾在NSN的OM項目擔任Scrum Master,如今在ERICCSON項目中擔任高級軟體工程師,有著紮實的C和C++功底,在工作之餘喜歡研究各種語言,貢獻於開源社區,開發自有軟體自娛自樂。致力於Swift相關技術文檔的翻譯和iOS App的編寫。

李捷,網名Oberyn:

李捷 李捷

老碼團隊成員。就職於諾基亞通訊技術(北京)有限公司成都分公司,擔任FDD-LTE OAM項目Product Owner。多年的通信行業開發和管理經驗,有著紮實的軟體編程功底和敏銳的行業發展觸覺。工作之餘,熱衷於貢獻各種開源項目和參與敏捷社區的活動,並努力把開源社區中靈活、優秀、高效的開發模式和工具引入到通信行業當中,致力於《Swift Programing Language 中文版》的翻譯和維護工作。

冉靜,網名Snow:

冉靜-Snow 冉靜-Snow

老碼團隊成員。就職於諾基亞信息技術有限公司,擔任通訊設備前端軟體開發人員。2007年於西南交通大學取得計算機算法與理論專業碩士學位,本科階段也是在西南交通大學學習計算機軟體專業,軟體行業從業8年,算是科班出生的老資格軟體從業人員,熟悉多種主流程式語言,對設計模式也有較深的研究,致力於Swift、iOS8相關英文技術文檔的翻譯工作。

目錄

第1章 從零搭建Swift開發環境 1

本書整體知識結構圖 本書整體知識結構圖

1.1 虛擬機安裝Mac OS 1

1.1.1 準備工作 1

1.1.2 動手吧 2

1.2 X86電腦安裝Mac OS 33

1.2.1 安裝方式簡介 33

1.2.2 規劃分區 34

1.2.3 使用硬碟助手Leopard 37

1.2.4 使用變色龍Chemeleon 38

1.2.5 使用HFS+ 39

1.2.6 正式安裝 41

1.3 結語 42

第2章 玩轉XCode 43

2.1 下載與安裝XCode 43

2.1.1 下載XCode 43

2.1.2 安裝XCode 43

2.2 XCode之初體驗 44

2.2.1 歡迎界面 44

2.2.2 第一個Swift程式 46

2.2.3 初識主界面 50

2.2.4 工具列 50

2.2.5 導航區域 51

2.2.6 編輯區域 57

2.2.7 調試區域 58

2.2.8 組件區域 60

2.3 XCode的調試大法 60

2.3.1 簡單粗暴的NSLog 60

2.3.2 斷點調試之LLDB 64

2.4 老碼的錦囊―幫助文檔 69

2.5 結語 71

第3章 Swift語法那些事兒 72

第三章知識結構圖 第三章知識結構圖

3.1 Swift的碑文 72

3.2 常量和變數 73

3.2.1 常量和變數的命名 74

3.2.2 列印常量和變數 75

3.3 類型標註 76

3.4 注釋 77

3.4.1 單行注釋 77

3.4.2 多行注釋 77

3.5 分號的落寞 77

3.6 語法屆的直性子―整型 78

3.7 語法屆學術范―浮點型 79

3.8 類型安全和類型推導 79

3.9 數字字面量 81

3.10 數字類型的轉換 83

3.10.1 整型間的轉換 83

3.10.2 整型和浮點型間的轉換 84

3.11 類型別名 85

3.12 布爾型 85

3.13 字元串和字元 86

3.13.1 字元串字面量 87

3.13.2 字元串的創建和初始化 88

3.13.3 字元串和字元的連線 89

3.13.4 字元計數 90

3.13.5 字元串內插 91

3.13.6 比較字元串 92

3.14 元組 94

3.15 可選類型 96

3.15.1 If語句和強制解封可選類型 97

3.15.2 可選綁定 97

3.15.3 隱式解封可選類型 98

3.16 斷言 99

3.17 集合 100

3.17.1 集合的可變性 100

3.17.2 數組的類型 100

3.17.3 數組字面量 101

3.17.4 訪問和修改數組 103

3.17.5 數組遍歷 105

3.17.6 數組創建和初始化 106

3.18 字典 107

3.18.1 字典字面量 108

3.18.2 訪問和修改字典 109

3.18.3 字典遍歷 111

3.18.4 創建空字典 112

3.19 結構體類型 112

3.19.1 基礎數據類型都是結構體 112

3.19.2 結構體的定義 113

3.20 枚舉類型 114

3.20.1 枚舉的定義 115

3.20.2 通過Switch語句匹配枚舉的值 116

3.20.3 關聯值 117

3.20.4 原始值 118

3.21 結語 119

第4章 離不開的運算符丟不下的流程控

第四章知識結構圖 第四章知識結構圖

4.1 運算符的家譜 120

4.2 賦值運算符 122

4.3 算術運算符 124

4.3.1 加減乘除 124

4.3.2 求余運算符 128

4.3.3 自變運算符 129

4.3.4 陰陽運算符 131

4.4 區間運算符 132

4.5 邏輯運算符 133

4.5.1 9種邏輯運算符綜合演練 134

4.5.2 三目運算符(?:) 135

4.5.3 空合運算符(??) 136

4.5.4 特徵等於運算符(===)和特徵不等運算符(!==) 137

4.6 位運算符 137

4.6.1 位求非(~) 137

4.6.2 位求與(&) 139

4.6.3 位求或(|) 140

4.6.4 位求異或(^) 141

4.6.5 移位操作 142

4.7 運算符專題 144

4.7.1 運算符里的江湖等級 144

4.7.2 圓括弧―打破江湖規矩的利器 147

4.7.3 定製自己的運算符套餐 147

4.8 語法界的建築師 153

4.8.1 for語句 153

4.8.2 while循環 156

4.8.3 if判斷 158

4.8.4 switch分揀 158

4.8.5 switch中的case專題 159

4.9 打破控制流程的壁壘 164

4.9.1 continue的用法 164

4.9.2 break的用法 165

4.9.3 return的用法 166

4.9.4 fallthrogh的用法 166

4.10 結語 167

第5章 語法屆的高富帥之函式和閉包 168

第五章知識結構圖 第五章知識結構圖

5.1 寫個函式來瞧瞧 168

5.2 函式怎么用 170

5.3 參數列表的奧妙 170

5.3.1 多參數的參數列表 170

5.3.2 沒有參數怎么辦 171

5.3.3 誰說參數不能有名字 171

5.3.4 酷炫的可變參數 173

5.3.5 默認參數的魅力 174

5.3.6 當默認參數遇上可變參數 176

5.3.7 參數性別是常量還是變數 177

5.3.8 讓我變,不管函式內外 178

5.4 仔細分析一下返回值的各種情況 179

5.4.1 沒返回值也行 179

5.4.2 一個返回值沒問題 180

5.4.3 多返回值也可以 180

5.5 挖挖函式的老底 181

5.6 函式的高級玩法 182

5.6.1 函式類型的變數與常量 182

5.6.2 函式類型作為參數 183

5.6.3 函式類型作為返回值 184

5.7 嵌套函式 185

5.8 柯里化函式 185

5.9 閉包―牛人的玩物 189

5.10 閉包表達式很好用 189

5.11 簡化閉包表達式 191

5.12 尾閉包 192

5.13 捕獲值 193

5.14 挖挖閉包的老底 195

5.15 結語 195

第6章 Swift之面向對象 196

第六章知識結構圖 第六章知識結構圖

6.1 面向對象的身世之謎 196

6.2 Swift中的OOP 199

6.2.1 何為類 199

6.2.2 何為實例 200

6.2.3 何為屬性 201

6.2.4 何為方法 212

6.2.5 繼承者們 218

6.2.6 讓我們構造一個類的實例吧 223

6.2.7 析構―迴光返照時的精彩 236

6.3 一根藤上三朵花:類、結構體和枚舉 238

6.4 Swift記憶體總管―自動引用計數(ARC) 243

6.4.1 強引用―霸道的關係 243

6.4.2 閉環與解環 246

6.4.3 解環妙法之弱引用 249

6.4.4 解環妙法之主引用 250

6.4.5 解環妙法之捕獲列表 252

6.5 玩轉Swift的各種類型 257

6.5.1 可選鏈―用前就知道是不是nil喔 257

6.5.2 類型檢查和轉換 266

6.5.3 俄羅斯娃娃―類型裡面還有類型 275

6.5.4 我們都是Swift的主人―擴展 278

6.5.5 用需求規劃藍圖―協定 287

6.6 通用是一種美德―泛型 307

6.6.1 泛型函式 309

6.6.2 通用類型 310

6.6.3 類型約束 312

6.6.4 關聯類型 315

6.7 結語 318

第7章 Swift與Cocoa框架 319

7.1 Swift和Objective-C的互用 319

7.1.1 將Objective-C導入Swift 319

7.1.2 將Swift導入Objective-C 324

7.1.3 互用性淺析 326

7.2 Cocoa框架 328

7.2.1 Cocoa的前世今生 329

7.2.2 CocoaTouch的世界 330

7.2.3 基礎類庫之Foundation框架 331

7.2.4 用戶界面之UIKit/AppKit 340

7.2.5 Core Data 340

7.2.6 使用Cocoa設計模式 350

7.3 Cocoapods―開源界的利器 359

7.3.1 為什麼需要Cocoapods 359

7.3.2 什麼是Cocoapods 359

7.3.3 安裝Cocoapods 359

7.3.4 Cocoapods環境設定 361

7.3.5 構建Cocoapods項目 362

7.4 結語 371

第8章 踏上Swift開發iOS之旅 372

8.1 規劃,不產品 372

8.2 偉大的建築從草圖開始 373

8.2.1 原型工具萬花筒 373

8.2.2 打造“魔法盒子”的原型 374

8.3 動工吧 379

8.3.1 認識我們的Magic Box項目 380

8.3.2 五個檔案―夢想起飛的地方 381

8.3.3 Baby版魔法盒誕生 390

8.4 神馬是沙盒 401

8.4.1 沙盒原理 401

8.4.2 沙盒在哪裡 402

8.4.3 沙盒的操作 405

8.5 結語 408

第9章 Swift商用版魔法盒 409

9.1 確定商用版魔法盒架構 409

9.1.1 功能化確認 409

9.1.2 客戶端UI級架構 410

9.1.3 系統部署架構 410

9.2 認識UIKit 411

9.3 編碼之主框架搭建 413

9.3.1 部署檔案目錄 413

9.3.2 刷新項目目錄 415

9.3.3 添加Cocoapods庫 415

9.3.4 橋檔案中增加庫引用 417

9.3.5 實現主視圖和主視圖控制器 418

9.3.6 增加子頁面視圖(View) 420

9.3.7 增加主頁面控制器(Controller) 423

9.3.8 建立控制器和視圖間的連線 425

9.3.9 主視圖控制器把子頁面組織起來 426

9.4 編碼之實現BoxPlaza頁面 432

9.4.1 準備供測試的圖片 432

9.4.2 準備配置檔案 433

9.4.3 實現配置檔案解析 435

9.4.4 為Box App添加Model 438

9.4.5 實現CollectionView 440

9.4.6 Autolayout的使用 442

9.4.7 設計CollectionViewCell 446

9.4.8 添加代碼 447

9.5 編碼之實現MyBox頁面 449

9.5.1 設計MyBox UI 449

9.5.2 添加代碼 449

9.6 編碼之實現MyInfo頁面 451

9.6.1 準備一個HTML 5小套用 452

9.6.2 添加代碼 454

9.7 結語 455

第10章 Swift致富版魔法盒 456

10.1 移動App贏利模式探討 456

10.2 廣告平台的選擇 457

10.3 多盟廣告平台SDK的使用 458

10.3.1 註冊平台套用 458

10.3.2 設定廣告類型 459

10.3.3 下載廣告發布標識和SDK 460

10.3.4 添加代碼 460

10.4 真機調試 462

10.4.1 基礎知識 462

10.4.2 創建套用標識 463

10.4.3 創建開發證書(Development) 466

10.4.4 創建標識檔案 469

10.4.5 添加設備 473

10.4.6 啟用真機調試 474

10.5 打包IPA測試 475

10.6 雲測試平台FIR.im使用 479

10.7 上傳AppStore 482

10.8 結語 484

案例精選

第四章-使用《春晚現場》的例子講解位求或運算

"位求或一般用在什麼場景呢?和位求與相比,位求或常用於位重置,更傾向於重置為真。位求與則傾向於重置為假。我們不舉《非誠勿擾》的例子了,請把老碼當成馮小剛,我們回到《2014年的春晚現場》,小夥伴們去給我檢查一下所有的燈是否順利工作。小夥伴們怎么做呢?假設我們有8盞燈,可能情況有開的,有沒開的,我們讓開著的為1,關著的為0。“

•代碼示例如下:略

第四章-使用《仙劍奇俠傳》講解自定義運算符

"小夥伴們要明白,任何一門優秀的語言不僅需要滿足現有的功能,還需要跟隨時代潮流才可以永葆青春,Swift語言也是,老碼帶領大家學習了上面的運算符,但是這些運算符都是發生在現有類型上,比如UInt8,Float等,那么如果我想要使用自己的類型怎么辦呢?比如我們在玩《仙劍奇俠傳》的時候,需要鍛造裝備,比如把兩把小劍鍛造在一起變成一把大劍,我們用Swift運算符實現這個場景,怎么辦呢?"

•代碼示例如下:略

第六章-使用《老碼去藍翔》的例子講解五類構造器

“小夥伴們,在Swift的世界裡總共有五類構造器,分別用於類、結構體和枚舉類型中,都有哪五類呢?它們分別是:

§ 默認構造器(Default Initializer):該構造器適用於類結構體和枚舉類型,小夥伴們無需實現,Swift編譯器會自動生成。

§ 指定構造器(Designated Initializer):該構造器只適用於類類型,地位非常崇高,前面例子中用的init構造器大部分是指定構造器。

§ 便捷構造器(Convenience Initializer):該構造器只適用於類類型,它主要是為了簡化指定構造器的使用而增加的,Swift語言裡通過指定構造器和便捷構造器來解決具有複雜繼承關係類的初始化問題,它們的詳細用法會在“類的構造過程”章節深入講解。

§ 成員構造器(Memberwise Initializer):該構造器只適用於結構體類型,方便小夥伴們方便初始化結構體成員。

§ 可失敗構造器(Failable Initializer):該構造器適用於類、結構體和枚舉類型,它主要用在某類型對象構造時可能失敗的情況下,這是非常科學的特性。

舉個例子吧,說到例子老碼便想到了心中那個封存已久的秘密:“挖掘機哪家強,老碼改行去藍翔”,接下來我們就用 《老碼去藍翔》的例子綜合演示這五類構造器的用法。"

•示例代碼如下:略

第六章-使用《最強大腦》的例子講解下標腳本

“到了這個小節,一想到要舉例子,便不由得勾起了老碼看江蘇衛視《最強大腦》時的失落,瞧人家那心算能力、記憶力,老碼頓時覺得自己的智商就像借來的似的,不管多長的數字,主持人一說完,就有神人說出答案,而我還沒聽清楚。多變態的大腦,為了心裡平衡,我們也來個 Swift版的《最強大腦》模擬這個情景:”

•示例代碼如下:略

推薦語錄

“和成都IT圈有一些接觸,並且和老碼的Baelish有過幾次交流,當他把這本書的前三章草稿發到我的桌面, 我心裡還有些懷疑,等到閱讀了第一章,第二章,我恨不得趕緊打開筆記本,裝虛擬機,操作一遍。該書算的上是一本初學者的必讀課本“

——中國科學院光電研究所在讀博士 姚光樂

“老王(Tyrion)說他在寫書,我隨口說,要不要哥給你寫篇序,結果這群老傢伙真的讓我給他們寫點啥,閱讀了一下樣書,拿給了我項目組做iOS的兄弟審閱了一番,得出這樣一句話-一本可以當地圖的啟蒙教材。”

——東軟集團成都分公司嵌入式事業部負責人 羅傳勇

“我花了四天的時間幫這本書做第八,第九章的和第十章的外部Review,開始有點倉促,覺得中國寫書不必太當真,可是老碼負責人打電話說:你的一點努力,可能就有數萬初學者受益,從來沒有這么覺得有正義感過。說一下我Review時的感覺:邏輯清晰,特別是對盈利模式的總結很到位,語言幽默,雖然刻板的我有點覺得囉嗦。所以如果你是剛入門的新手,強烈推薦。”

——成都麥博斯移動創新有限公司CTO 王天河

“做了這么多年的測試,竟被閨蜜Snow喊去做試讀。畫了一周時間通讀了這本長達22萬字的巨著,請讓我描述一下一個程式猿的感受,整本書把語法講的跟說故事一樣,語法講解很清晰,特別是對Swift的思想描述的很到位,後面的開發案例講解了整個開發的生命周期。最後決定了,讓Snow送我一本,我也要轉行做iPhone App開發。”

——成都志投科技有限公司測試經理 張燕

中文版網站知道了老碼團隊,在學習Swift時受到了Tyrion的很多指點,充分的感受到一群老工程師的嚴謹和對開源的執著,我不用擔心去哪裡下載XCode,因為老碼雲盤裡都有,我們不用擔心Swift語言的更新,因為老碼們會及時更新Swift的更新訊息,閱讀了這本書的前四章,我深深的被打動了,故事裡講述語法,案例中融會貫通。最後還是想問:醜哥,你的書到底出不出啊!”

——Swift興趣交流二群 群友- 車冰

“剛開始覺得Tyrion挺煩的,每天發老碼團隊的微博,還曾經嘲諷他打廣告,可是後來在和他討論Mutating Method方法應該翻譯為突變方法,變性方法還是變質方法時,我慢慢的對這群人的態度發生了改變,他們較真,即使一個書中的案例都要在群里討論老半天,他們執著,維護翻譯600多頁的文檔,他們貌似很有錢,因為他在群里經常喊我們不要買他們的書而去看他們翻譯的Swift文檔。碼哥的書是業界良心。”

——Swift Developer群 群友- 楊帆

讀者評語

“這本書不錯,看著作者們一章章寫過來的。 內容講解比較有趣、詳細。 文筆很幽默,不會讓人覺得枯燥乏味。 的確是一本值得推薦的Swift編程書籍。”

——oupula 銀牌會員 廣西

“選擇老碼的書是因為先認識了這個人,人靠譜,書自然靠譜。 小小价錢買到的不僅僅是一本書,還有書背後的一幫團隊和朋友。 我們在 這裡 等你來 加入 加油”

——j***1 銅牌會員 湖北

“一本入門級的書,對於需要進入IOS世界的小夥伴們還是值得夠購買的,每個知識點還是講得比較詳細,唯一不足的就是關於控制項的知識比較少。”

——j***2 金牌會員 浙江

“這不僅僅是一門swift 程式語言的入門入籍,其中還涉及到了關於蘋果套用開發所需要的方方面面,包括開發環境、CocoaPods 等等市面上絕大多數書籍不會涉及到的方面。另外,書內語言簡單、樸實、風趣,對入門開發者來說十分友好,書中的細節十分豐富。這本書中包含了老碼團隊在平常套用開發中遇到過的問題、以及心得,是值得收藏的好書。另外本書的作者之一醜哥可是很有趣的喲,哈哈哈! 不過還是建議第二版能夠附帶安裝光碟,將書中的實例程式放進去,在光碟中還可以放上一些參考資料合集等等,這樣更好!”

——星夜暮晨 金牌會員 湖北

"這是一本天生驕傲的 swift 書籍, 天生帶有認真的屬性,邏輯清晰,語言幽默,非常適合入門者,移動開發小白和跨行業入門者。 當然你要是有波普精神也可以買了它而不去讀。"

——w***1(匿名)

"書看了幾頁,那個感覺簡直就是一個爽。對小白來說太適合啦。還有很多是你在別的書中看不到的,不論你是在哪裡看視頻教程也木有這么細緻吧。總體感覺來說,很好的書。還有就是在群里可以和那些老頑童們好好的交流。"

——x***5(匿名)

“這本書是現在swift教程里講得最細緻的一本了,其他的書基本都是抄抄拼拼來的,代碼好多還編譯不通過。”

—— w***8(匿名)

1.“紙質非常好,印刷也很好,大概看了一下,不錯,物流很快的說”

——譚***均(匿名)

相關詞條

熱門詞條

聯絡我們