
互用性是讓 Swift 和 Objective-C 相接合的一種特性,使你能夠在一種語言編寫的文件中使用另一種語言。當你準備開始把 Swift 融入到你的開發流程中時,你應該懂得如何利用互用性來重新定義並提高你寫 Cocoa 應用的方案。
互用性很重要的一點就是允許你在寫 Swift 代碼時使用 Objective-C 的 API 接口。當你導入一個 Objective-C 框架後,你可以使用原生的 Swift 語法實例化它的 Class 並且與之交互。
Swift和Objective-C的聯係
蘋果一直在改進Objective-C,默認編譯器由GCC換成了LLVM,並先後加入literal、block、ARC、Module等特性。我認為最大的兩點改進為以下兩點。
1.ARC+弱引用,本質還是引用計數。但從人手調用retain、release,轉成編譯器自動插入代碼是個質的飛躍。
2.block+GCD,block引入函數式風格的代碼塊,而GCD則大大簡化了異步代碼編寫方式。
WWDC之後,我開始思考一個問題,蘋果為什麼不繼續改進Objective-C,而發布Swift這門新語言呢?這個問題隻有蘋果自己知道,其他人隻能猜測。
可能的原因有以下幾個方麵。
1.Swift表麵看起來很簡單,語法跟流行的C#、JavaScript、C++等語言相似,可以吸引更多的開發者。
2.Objective-C因為需要兼容C,所以限製了它的改進。而Swift沒有曆史包袱,可以自由采用最新的語言設計研究成果。
3.設計者的個人品位,Chris Lattner不習慣Objective-C的語法,就去設計了一個新的。當然,這是玩笑話,不要太當真。
Swift雖然是新語言,卻融合了Objective-C的很多特性。讀Swift的文檔會發現,Objective-C與Swift的聯係十分密切。Objective-C使用的很多底層技術,被應用到Swift中。
Swift與Objective-C共用同一套運行時環境
我們編寫程序,讓程序運行起來,被機器執行的代碼並非全部是由我們自己來編寫的。需要同時運行很多預先寫好的支持性的代碼,才能讓我們自己的代碼運行起來。程序並非單獨存在的,運行時處在一定的環境當中。我總聯想到很多小螞蟻在泥土上麵爬,而我自己寫的程序隻是其中的一隻。
Swift跟Objective-C編譯出的程序代碼運行在同一套運行環境上麵。Swift的類型可以橋接到Objective-C的類型,反之亦然。Swift編寫的代碼可以調用Objective-C編寫的代碼,反之也一樣。
Objective-C之前積累下來的大量類庫,實現不用改寫Swift就可以直接調用。
同一個工程,可以同時使用Swift和Objective-C
Objective-C在一端,Swift在另一端,兩端經中間文件進行橋接。橋接文件包含Objective-C的頭文件,編譯時自動轉成Swift可以識別的形式。Swift就可以使用Objective-C的類和它的函數。
在Swift的類中,加上@objc(類名)的字樣,Objective-C也可以使用Swift編寫的類。但Swift跟C++的相互調用,需要Objective-C來封裝。
總的來說,共同使用Swift和Objective-C/C++還算方便,但已不能將幾種語言的代碼,混寫在同一文件。大概是因為Swfit的語法不像Objective-C那樣獨特,混寫難以將Swift的代碼識別出來。
Swift骨子裏大多與Objective-C一樣
Objective-C出現過的絕大多數概念,比如引用記數、ARC、屬性、協議、接口、初始化、擴展類、命名參數、匿名函數等,在Swift中繼續有效(可能隻是換了個術語)。我自己將Swift看成是Objective-C的一塊大大的語法糖,其他人可能有不同感受。
Swift大多數概念與Objective-C一樣,也有些概念在Objective-C找不到對應,比如泛型。Swift中將那種操作寫一次就可以作用多個類型的語法叫做Generics(泛型)。
編程語言和語法
新語言出來時,總會有種聲音認為語言隻是工具,他們會覺得重要的是思想,而看輕工具的作用。認為編程語言是工具本身並沒有大錯,但語言並非普通的工具,而是思維工具,不能忽視語言對思維的影響。編程語言就如同數學符號,數學符號也是種思維工具,好的數學符號會幫助使用者思考,更奇妙的是似乎符號本身也會思考。用0~9這些阿拉伯數字進行計算時會感到一切都很自然,似乎數字本身在計算,而不是人在做計算。
盡管編程語言的語法很重要,但語法背後的概念更重要。當明白語法背後的概念後,從一門語言切換到另一門有著相同概念的語言會很容易。但語法會影響表達,理論上每門語言都可以表達任何概念。不過當某種概念在某門語言中很難表達出來時,我們就會傾向於不使用它,這種概念在那門語言的社區就難以被人熟知。
編程語言用來表達思路,表達起來是否自然是很重要的。最理想的是不多不少、剛剛好,寫起來自然,讀起來更需要自然。並非功能越多的語言越好,而是應該越能幫助思考,越容易表達思路的語言越好。
Swift背後的概念大多跟Objective-C差不多。但Swift吸收了很多其他語言的語法,同一個概念,寫起來比Objective-C簡潔得多、自然得多。從表達的角度來說,Swift比Objective-C優秀。
Swift的語法
蘋果出了本很不錯的語法教程來詳細描述Swift的語法。在這裏,我們隻挑一些有意思的點來討論。
妻中蜜3全cg存檔
遊戲工具 / 28KB
下載
1
csgo空格鍵連跳腳本綠色免費版
遊戲工具 / 564KB
下載
2
易控王文檔加密軟件v2017官方版綠色免費版
文件處理 / 46M
下載
3
DNF9周年第十套天空時裝補丁
遊戲工具 / 1.6M
下載
4
dnf一鍵任務助手v0428最新免費版
遊戲工具 / 863KB
下載
5
3456wg多選皮膚v10.6官方版
遊戲工具 / 2.2M
下載
6
愛普生R230打印機清零軟件漢化版
辦公學習 / 1.8M
下載
7
視頻、圖片去水印大師HitPaw Watermark Removerv1.2.1 完美解鎖版
文件處理 / 80.4M
下載
8
adobe清理工具(AdobeCreativeCloudCleanerTool)V2017 綠色版
文件處理 / 5.9M
下載
9
GTKWave(WAV文件波形察看工具)v3.3.66 官方版
文件處理 / 4.4M
下載
10
140.5M / 09-05
立即下載
76.4M / 03-25
立即下載
55M / 06-05
立即下載
88.7M / 04-13
立即下載
900.9M / 03-02
立即下載
96.2M / 07-06
立即下載
311.2M / 07-06
立即下載
335M / 07-06
立即下載
200M / 07-06
立即下載
413.8M / 07-06
立即下載
480.3M / 01-03
立即下載
768.9M / 08-19
立即下載
165.4M / 09-05
立即下載
131.8M / 04-13
立即下載
195.6M / 03-03
立即下載
45.6M / 09-08
立即下載
665.2M / 07-06
立即下載
2.84G / 07-06
立即下載
93M / 07-06
立即下載
338.3M / 07-06
立即下載
959.8M / 12-24
立即下載 312M / 07-30
立即下載 1.38G / 07-26
立即下載 109.8M / 06-03
立即下載 142M / 01-08
立即下載 1.2M / 11-23
立即下載 548.8M / 04-13
立即下載 1.6M / 04-13
立即下載 1.48G / 03-18
立即下載 646.6M / 03-03
立即下載 401.9M / 01-06
立即下載 1.89G / 12-19
立即下載 110.5M / 09-05
立即下載 33.4M / 09-05
立即下載 60M / 04-29
立即下載 254M / 04-25
立即下載 659M / 04-23
立即下載 253.4M / 12-08
立即下載 253M / 12-08
立即下載 1.19G / 11-16
立即下載 118.2M / 01-06
立即下載 488.3M / 06-04
立即下載 369M / 09-22
立即下載 181.5M / 09-22
立即下載 201.2M / 09-05
立即下載 248.9M / 12-08
立即下載 248.9M / 12-08
立即下載 100.6M / 03-06
立即下載 148.9M / 03-06
立即下載 1.12G / 07-06
立即下載 126.7M / 02-04
立即下載 1.76G / 09-22
立即下載 1.92G / 04-17
立即下載 201.5M / 04-13
立即下載 7.31G / 07-01
立即下載 94.3M / 07-06
立即下載 2.48G / 07-06
立即下載 7.63G / 07-06
立即下載 1M / 07-06
立即下載 778.1M / 07-06
立即下載 1.40G / 12-19
立即下載 72M / 07-06
立即下載 548.7M / 07-06
立即下載 1.00G / 07-06
立即下載 9.13G / 07-06
立即下載 126.2M / 07-06
立即下載 72M / 07-06
立即下載 105.1M / 07-06
立即下載 132M / 07-06
立即下載 132M / 07-06
立即下載