淺談Swift和OC的區別

來源:互聯網
上載者:User

標籤:get   ref   運行時   枚舉   splay   play   自動   轉換   社區   

前言

轉眼Swift3都出來快一年了,從OC到Swift也經曆了很多,所以對兩者的一些使用區別也總結了一點,暫且記錄下,權當自己的一個筆記。

當然其中一些區別可能大家都有耳聞,所以這裡也會結合自身的一些平常記錄,稍許整理,才誕生了本篇文章,中間或許會有不對之處,還望指出來,共同進步。

 

本文

一、Swift和Objective-C的聯絡

Swift和Objective-C共用一套運行時環境,Swift的類型可以橋接到Objective-C(下面我簡稱OC),反之亦然。兩者的互相引用混合編程我之前有寫過簡單介紹,有興趣的可以移步這裡:

iOS OC和Swift進行互相調用。

其次就是,OC之前積累的很多類庫,在Swift中大部分依然可以直接使用,當然,Swift3之後,一些文法改變了很多,不過還是有跡可循的。OC出現過的絕大多數概念,比如引用計數、ARC、屬性、協議、介面、初始化、擴充類、具名引數、匿名函數等,在Swift中繼續有效(可能最多換個術語)。Swift大多數概念與OC一樣。當然Swift也多出了一些新興概念,這些在OC中是沒有的,比如範型、元組等。

 

 

二、Swift比Objective-C有什麼優勢?

1、Swift容易閱讀,文法和檔案結構簡易化。

2、Swift更易於維護,檔案分離後結構更清晰。

3、Swift更加安全,它是型別安全的語言。

4、Swift代碼更少,簡潔的文法,可以省去大量冗餘代碼

5、Swift速度更快,運算效能更高。

 

 

三、Swift目前存在的缺點

1、版本不穩定,之前升級Swift3大動刀,苦了好多人,swift4目前還未知

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

3、社區的開源項目偏少,畢竟OC獨大好多年,很多優秀的類庫都不支援Swift,不過這種狀況正在改變,現在有好多優秀的Swift的開源類庫了

4、公司使用的比例不高,很多公司以穩為主,還是在使用OC開發,很少一些在進行混合開發,更少一些是純Swift開發。

5、偶爾開發中遇到的一些問題,很難尋找到相關資料,這是一個弊端。

6、純Swift的運行時和OC有本質區別,一些運行時的強大功能,在純Swift中變無效了。

 

四、Swift其他功能說明

1、Swift的記憶體管理

Swift使用自動引用計數(ARC)來簡化記憶體管理,與OC一致。

2、Swift的可選項類型(Optionals)介紹

Swift引入了可選項類型,用於處理變數值不存在的情況。Optionals類似於OC中指向nil的指標,但是適用於所有資料類型,而非僅僅局限於類,Optionals相比於OC中的nil指標,更加安全和簡明,並且也是Swift諸多最強大功能的核心。

3、Swift中的 !和  ?

這兩個符號是用來標記這個變數的值是否可選,!表示可選變數必須保證轉換能夠成功,否則報錯,但定義的變數可以直接使用;?表示可選變數即使轉換不成功也不會報錯,變數值為nil,如果轉換成功,要使用該變數時,後面需要加!進行修飾。

4、Swift中範型的簡單說明

範型是用來使代碼能安全工作,swift中的範型可以在函數資料和普通資料類型中使用,例如類、結構體或枚舉。範型可以解決代碼複用的問題,

舉個簡單例子:這兩個方法很類似,主要就一個參數類型的區別。

   func isIntEqual(x:Int,y:Int) -> Bool {        return x == y    }        func isStringEqual(x:String,y:String) -> Bool {        return x == y    }
View Code

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

  func isObjEqual<T:Equatable>(x:T,y:T) -> Bool {        return x == y    }
View Code

這樣,當我們使用時,我們如果將兩個不同類型的數進行比較,編譯器會馬上提醒我們,從而快速避免這種情況。

 

5、Swift的存取權限變更

swift新增了兩種存取權限,許可權更細化。具體查看這裡:

存取權限 由大到小 依次為:open,public,internal(預設),fileprivate,private

 

 

五、其他補充

========================= swift專屬 ==================== 

1、範圍運算子

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

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

常見的如for迴圈:for i in 0...9{}

 

2、專屬的元群組類型

元組(tuples)把多個值組合成一個複合值。元組內的值可以使任意類型,並不要求是相同類型。eg:

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

 

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

使用常量,更加安全,不能夠被修改,在需要對對象進行修改的時候 只能用var修飾.

 

 

========================= 細節使用區別 ====================

1、swift不分.h和.m檔案 ,一個類只有.swift一個檔案,所以整體的檔案數量比起OC有一定減少。

2、swift句尾不需要分號 ,除非你想在一行中寫三行代碼就加分號隔開。

3、swift資料類型都會自動判斷 , 只區分變數var 和常量let

4、強制類型轉換格式不同   OC強轉:(int)a      Swift強轉:Int(a)

5、關於BOOL類型更加嚴格 ,Swift不再是OC的非0就是真,而是true才是真false才是假 

6、swift的 迴圈語句中必須加{} 就算只有一行代碼也必須要加 

7、swift的switch語句後面可以跟各種資料類型了 ,如浮點、字串都行,並且裡面不用寫break(OC好像不能字串)

8、swift  if後的括弧可以省略:  if a>b {}

9、swift列印  用print("")    列印變數時可以  print("\(value)")

 

 

 

 六、Swift的前景

可能很多人會問,到底該不該學Swift,難度大不大?

我的理解是:

如果時間可以,可以試著學習,最好能試著寫一點代碼,單純的看書或看教程沒太大意義,實踐出真知。

其實最初期的學習,更多的是文法的轉變而已,這裡的痛點是不大的,而Swift的思想我們可以後期慢慢學習並深入體會。

 

最後,我還是希望Swift發展的越來越好,功能和社區完善的更棒。

 

 

【未完待續 。。。】

  Enjoy~

 

淺談Swift和OC的區別

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.