前言

轉(zhuǎn)眼Swift3都出來(lái)快一年了,從OC到Swift也經(jīng)歷了很多,所以對(duì)兩者的一些使用區(qū)別也總結(jié)了一點(diǎn),暫且記錄下,權(quán)當(dāng)自己的一個(gè)筆記。

當(dāng)然其中一些區(qū)別可能大家都有耳聞,所以這里也會(huì)結(jié)合自身的一些平常記錄,稍許整理,才誕生了本篇文章,中間或許會(huì)有不對(duì)之處,還望指出來(lái),共同進(jìn)步。

 

正文

一、Swift和Objective-C的聯(lián)系

Swift和Objective-C共用一套運(yùn)行時(shí)環(huán)境,Swift的類(lèi)型可以橋接到Objective-C(下面我簡(jiǎn)稱(chēng)OC),反之亦然。兩者的互相引用混合編程我之前有寫(xiě)過(guò)簡(jiǎn)單介紹,有興趣的可以移步這里:

iOS OC和Swift進(jìn)行互相調(diào)用

其次就是,OC之前積累的很多類(lèi)庫(kù),在Swift中大部分依然可以直接使用,當(dāng)然,Swift3之后,一些語(yǔ)法改變了很多,不過(guò)還是有跡可循的。OC出現(xiàn)過(guò)的絕大多數(shù)概念,比如引用計(jì)數(shù)、ARC、屬性、協(xié)議、接口、初始化、擴(kuò)展類(lèi)、命名參數(shù)、匿名函數(shù)等,在Swift中繼續(xù)有效(可能最多換個(gè)術(shù)語(yǔ))。Swift大多數(shù)概念與OC一樣。當(dāng)然Swift也多出了一些新興概念,這些在OC中是沒(méi)有的,比如范型、元組等。

 

 

二、Swift比Objective-C有什么優(yōu)勢(shì)?

1、Swift容易閱讀,語(yǔ)法和文件結(jié)構(gòu)簡(jiǎn)易化。

2、Swift更易于維護(hù),文件分離后結(jié)構(gòu)更清晰。

3、Swift更加安全,它是類(lèi)型安全的語(yǔ)言。

4、Swift代碼更少,簡(jiǎn)潔的語(yǔ)法,可以省去大量冗余代碼

5、Swift速度更快,運(yùn)算性能更高。

 

 

三、Swift目前存在的缺點(diǎn)

1、版本不穩(wěn)定,之前升級(jí)Swift3大動(dòng)刀,苦了好多人,swift4目前還未知

2、使用人數(shù)比例偏低,目前還是OC的天下

3、社區(qū)的開(kāi)源項(xiàng)目偏少,畢竟OC獨(dú)大好多年,很多優(yōu)秀的類(lèi)庫(kù)都不支持Swift,不過(guò)這種狀況正在改變,現(xiàn)在有好多優(yōu)秀的Swift的開(kāi)源類(lèi)庫(kù)了

4、公司使用的比例不高,很多公司以穩(wěn)為主,還是在使用OC開(kāi)發(fā),很少一些在進(jìn)行混合開(kāi)發(fā),更少一些是純Swift開(kāi)發(fā)。

5、偶爾開(kāi)發(fā)中遇到的一些問(wèn)題,很難查找到相關(guān)資料,這是一個(gè)弊端。

6、純Swift的運(yùn)行時(shí)和OC有本質(zhì)區(qū)別,一些OC中運(yùn)行時(shí)的強(qiáng)大功能,在純Swift中變無(wú)效了。

7、對(duì)于不支持Swift的一些第三方類(lèi)庫(kù),如果非得使用,只能混合編程,利用橋接文件實(shí)現(xiàn)。

 

四、Swift其他功能說(shuō)明

1、Swift的內(nèi)存管理

Swift使用自動(dòng)引用計(jì)數(shù)(ARC)來(lái)簡(jiǎn)化內(nèi)存管理,與OC一致。

2、Swift的可選項(xiàng)類(lèi)型(Optionals)介紹

Swift引入了可選項(xiàng)類(lèi)型,用于處理變量值不存在的情況。Optionals類(lèi)似于OC中指向nil的指針,但是適用于所有數(shù)據(jù)類(lèi)型,而非僅僅局限于類(lèi),Optionals相比于OC中的nil指針,更加安全和簡(jiǎn)明,并且也是Swift諸多最強(qiáng)大功能的核心。

3、Swift中的 !和  ?

這兩個(gè)符號(hào)是用來(lái)標(biāo)記這個(gè)變量的值是否可選,!表示可選變量必須保證轉(zhuǎn)換能夠成功,否則報(bào)錯(cuò),但定義的變量可以直接使用;?表示可選變量即使轉(zhuǎn)換不成功也不會(huì)報(bào)錯(cuò),變量值為nil,如果轉(zhuǎn)換成功,要使用該變量時(shí),后面需要加!進(jìn)行修飾。

4、Swift中范型的簡(jiǎn)單說(shuō)明

范型是用來(lái)使代碼能安全工作,swift中的范型可以在函數(shù)數(shù)據(jù)和普通數(shù)據(jù)類(lèi)型中使用,例如類(lèi)、結(jié)構(gòu)體或枚舉。范型可以解決代碼復(fù)用的問(wèn)題,

舉個(gè)簡(jiǎn)單例子:這兩個(gè)方法很類(lèi)似,主要就一個(gè)參數(shù)類(lèi)型的區(qū)別。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷(xiāo)培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷(xiāo)培訓(xùn) View Code

我們可以利用范型合并一下:

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷(xiāo)培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷(xiāo)培訓(xùn) View Code

這樣,當(dāng)我們使用時(shí),我們?nèi)绻麑蓚€(gè)不同類(lèi)型的數(shù)進(jìn)行比較,編譯器會(huì)馬上提醒我們,從而快速避免這種情況。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷(xiāo)培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷(xiāo)培訓(xùn)

 

5、Swift的訪問(wèn)權(quán)限變更

swift新增了兩種訪問(wèn)權(quán)限,權(quán)限更細(xì)化。具體查看這里:

訪問(wèn)權(quán)限 由大到小 依次為:open,public,internal(默認(rèn)),fileprivate,private

 

6、Swift Foundation框架

為了方便使用,Swift的基本類(lèi)型都可以無(wú)縫轉(zhuǎn)換到 Foundation 框架中的對(duì)應(yīng)類(lèi)型。

因?yàn)?Cocoa 框架所接受和返回的基本數(shù)據(jù)類(lèi)型都是自身框架內(nèi)的類(lèi)型,也就是 Foundation 中所定義的像 NSString,NSNumber,NSArray 等這些東西。而脫離 Cocoa 框架進(jìn)行 app 開(kāi)發(fā)是不可能的事情。因此我們?cè)谑褂?Swift 開(kāi)發(fā) app 時(shí)無(wú)法避免地需要在 Swift 類(lèi)型和 Foundation 類(lèi)型間進(jìn)行轉(zhuǎn)換。如果需要每次顯式地書(shū)寫(xiě)轉(zhuǎn)換的話,大概就沒(méi)人會(huì)喜歡用 Swift 了。還好 Swift 與 Foundation 之間的類(lèi)型轉(zhuǎn)換是可以自動(dòng)完成的,這使得通過(guò) Swift 使用 Cocoa 時(shí)順暢了很多。

而且這個(gè)轉(zhuǎn)換不僅是自動(dòng)的,而且是雙向的,而且無(wú)論何時(shí)只要有可能,轉(zhuǎn)換的結(jié)果會(huì)更傾向于使用 Swift 類(lèi)型。也就是說(shuō),只要你不寫(xiě)明類(lèi)型是需要 NS 開(kāi)頭的類(lèi)型的時(shí)候,你都會(huì)得到一個(gè) Swift 類(lèi)型。

所以,Swift中的類(lèi)型和OC的類(lèi)型對(duì)應(yīng)關(guān)系:

String - NSString
Int, Float, Double, Bool 以及其他與數(shù)字有關(guān)的類(lèi)型 - NSNumber
Array - NSArray
Dictionary - NSDictionary

 

 

五、其他補(bǔ)充

========================= swift獨(dú)有 ==================== 

1、范圍運(yùn)算符

a...b 表示 [a,b] 包括a和b 。 (如3...5  就是范圍取3,4,5)

a..<b 表示 [a,b) 包括a,不包括b 。 (如3...5  就是范圍取3,4)

常見(jiàn)的如for循環(huán):for i in 0...9{}

 

2、獨(dú)有的元組類(lèi)型

元組(tuples)把多個(gè)值組合成一個(gè)復(fù)合值。元組內(nèi)的值可以使任意類(lèi)型,并不要求是相同類(lèi)型。eg:

var value = (Int,String) = (x:15,y:"abc")

 

3、swift中使用let定義常量,var定義變量

使用常量,更加安全,不能夠被修改,在需要對(duì)對(duì)象進(jìn)行修改的時(shí)候 只能用var修飾.

 

 

========================= 細(xì)節(jié)使用區(qū)別 ====================

1、swift不分.h和.m文件 ,一個(gè)類(lèi)只有.swift一個(gè)文件,所以整體的文件數(shù)量比起OC有一定減少。

2、swift句尾不需要分號(hào) ,除非你想在一行中寫(xiě)三行代碼就加分號(hào)隔開(kāi)。

3、swift數(shù)據(jù)類(lèi)型都會(huì)自動(dòng)判斷 , 只區(qū)分變量var 和常量let

4、強(qiáng)制類(lèi)型轉(zhuǎn)換格式不同   OC強(qiáng)轉(zhuǎn):(int)a      Swift強(qiáng)轉(zhuǎn):Int(a)

5、關(guān)于BOOL類(lèi)型更加嚴(yán)格 ,Swift不再是OC的非0就是真,而是true才是真false才是假 

6、swift的 循環(huán)語(yǔ)句中必須加{} 就算只有一行代碼也必須要加 

7、swift的switch語(yǔ)句后面可以跟各種數(shù)據(jù)類(lèi)型了 ,如Int、字符串都行,并且里面不用寫(xiě)break(OC好像不能字符串)

8、swift  if后的括號(hào)可以省略:  if a>b {},而OC里 if后面必須寫(xiě)括號(hào)。

9、swift打印  用print("")    打印變量時(shí)可以  print("\(value)"),不用像OC那樣記很多%@,d%等。

 

 

 

 六、Swift的前景

可能很多人會(huì)問(wèn),到底該不該學(xué)Swift,難度大不大?

我的理解是:

如果時(shí)間可以,可以試著學(xué)習(xí),最好能試著寫(xiě)一點(diǎn)代碼,單純的看書(shū)或看教程沒(méi)太大意義,實(shí)踐出真知。

其實(shí)最初期的學(xué)習(xí),更多的是語(yǔ)法的轉(zhuǎn)變而已,這里的難點(diǎn)是不大的,而Swift的思想我們可以后期慢慢學(xué)習(xí)并深入體會(huì)。

 

最后,我還是希望Swift發(fā)展的越來(lái)越好,功能和社區(qū)完善的更棒。

http://www.cnblogs.com/yajunLi/p/6862164.html