Swift語言高速入門

Swift語言高速入門(首部同步新版官方API文檔和語法的Swift圖書,確保代碼可編譯,做者專家在線答疑,圖書勘誤實時跟進編程

極客學院 編著   swift

ISBN 978-7-121-24328-8設計模式

2014年10月出版數組

訂價:59.00元 安全

428頁網絡

16開閉包

編輯推薦app

本書內容翔實,實例豐富,同步新版官方API文檔和語法框架

語法|詞法|框架覆蓋全面,實戰案例|配套習題豐富編程語言

多位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章 0基礎語法          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  keyword和標點符號    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開發project師。

李藝(網名:蝸牛君),蘇州人士,清華計算機碩士,極客學院Swift專家,木子寧工做室掌門。Adobe中國首批社區幫助管理員與版主,著名iOS獨立遊戲開發人員,愛好書法、簫、吉他等,喜愛郊遊,偶爾會作義工。

博客地址:www.muzining.com

微博:weibo.com/angrymarble

媒體評論

Swift在保證性能的同一時候整合了很是多現代的編程特性,對OSX和iOS開發人員來講是重大的改進,也是之後的趨勢。本書很是好地解說了Swift入門學習中各類實例、解決方式並配以詳盡的語言文檔,是開發人員學習Swift的必備書籍!

——馮斌 正點科技技術總監

移動互聯網時代,技術更新異常頻繁。僅守住所謂的紮實的「基本功」已跟不上時代的潮流,必須時刻緊跟最新技術。極客學院緊抓技術熱點,並在第一時間將其奉獻給讀者,不管是網絡課程模式仍是書籍形式,都是既追求實效性,又追求深度,真是讀者的福音。

——毛曉冬 高通中國資深研發經理

極客學院的創業者們在國內移動端開發技術領域經營多年,積累很深厚,致力於技術的交流和傳承,培養出了很多優秀的project師。相信這本書相同不會辜負各位開發人員的指望,值得你們期待!

——王鵬雲 多盟技術副總裁

想學好一門編程語言要從選好書開始!極客學院編著的好書值得您即刻購買!

——謝耀輝 活動行聯合創始人

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語言中的字符串鏈接相同也很easy,假設兩個值都是字符串,則可直接用加號鏈接,例如如下所看到的:

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語句可以不用加breakkeyword。

函數

假設要定義一個函數用來輸出一段信息,則代碼例如如下所看到的:

func sayHello(){

    println("HelloSwift")

}

 

這樣的寫法很簡潔,我曾在Dart語言中見過這樣的寫法,func是一個keyword,用來指明所定義的是一個函數,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()

面向對象

類的定義很easy,例如如下所看到的:

class Hello{

    func sayHello(){

        println("HelloSwift")

    }

}

 

該演示樣例定義了一個名爲Hello的類,其有一個成員函數名爲sayHello,假設想調用該類及對應函數,則使用方法例如如下:

var h = Hello()

h.sayHello()

 

類的繼承的寫法也很easy,這一點繼承了C++語言的優秀傳統,假設想定義一個名爲Hi的類繼承自Hello,則寫法例如如下:

class Hi:Hello{

}

 

假設後期還想爲某類加入功能,有兩種方法。第一種是直接改動類的源代碼加入功能,另一種是爲該類寫擴展功能,如下咱們來着重介紹另一種。假設想爲Hello類再加入一個名爲sayHi的方法,則代碼例如如下所看到的:

extension Hello{

    func sayHi(){

        println("HiSwift")

    }

}

 

當中,extensionkeyword表示要擴展已經存在的類的功能,假設想擴展系統或者第三方的某個類的功能而得不到其源代碼時,採用這樣的方式將會是一個絕佳的選擇。例如如下所看到的:

extension String{

    func printSelf(){

        println(self)

    }

}

var str = "Hello Swift"

str.printSelf()

 

經過這樣的方式擴展了系統的String類,爲其添加了一個printSelf()方法,在使用時可直接調用目標對象的printSelf()方法,很方便。

關於面向對象的不少其它特性,請看本書正文。

事實上extension還有還有一個用途,那就是模擬命名空間,請看下一個主題。

命名空間

在Swift語言中並無專門的命名空間的keyword,但是可以模擬命名空間這個面向對象的特性,例如如下所看到的:

//定義命名空間ime

class ime{

}

 

//在ime命名空間下定義Hello類

extension ime{

    class Hello{

        func sayHello(){

           println("Hello Swift")

        }

    }

}

 

使用該類及相關方法的代碼例如如下所看到的:

var h = ime.Hello()

h.sayHello()

 

有沒有讓你眼前一亮的感受呢?

結尾

就寫到這裏吧,想必你們已經對Swift有了一個初步的瞭解,而且火燒眉毛地想開始學習了,努力吧,少年,你就是將來的太陽!

 

相關文章
相關標籤/搜索