swift和OC的比較

swift ----OC比較

編程范式

Swift 可以面向協(xié)議編程、函數(shù)式編程、面向?qū)ο缶幊獭?br> Objective-C 以面向?qū)ο缶幊虨橹鳎斎荒憧梢砸腩愃芌eactiveCocoa的類庫 來進行函數(shù)式編程。

類型安全

Swift 是一門類型安全的語言。鼓勵程序員在代碼中清楚明確值的類型。如果代碼中使 用一個字符串 String,那么你不能錯誤地傳遞一個整型 Int 給它。因為 Swift 是類型安 全的,它會在代碼編譯的時候做類型檢查,并且把所有不匹配的類型作為一個錯誤標記 出來。這樣使得程序員在開發(fā)中盡可能早地發(fā)現(xiàn)和修正錯誤。
而 Objective-C 則不然,你聲明一個 NSString 變量,仍然可以傳一個 NSNumber 給 它,盡管編譯器會抱怨,但是你仍然可以作為 NSNumber 來使用它。

值類型增強

在 Swift 中,典型的有 struct、enum 以及 tuple 都是值類型。而平時使用的 Int、 Double、Float、String、Array、Dictionary、Set 其實都是用結(jié)構(gòu)體實現(xiàn)的,也是值 類型。
Objective-C中,NSNumber、NSString以及集合類對象都是指針類型。

枚舉增強

Swift 的枚舉可以使用整型、浮點型、字符串等,還能擁有屬性和方法,甚至支持 泛型、協(xié)議、擴展等等。
Objective-C 里面的枚舉則雞肋很多。

泛型

Swift 中支持泛型,也支持泛型的類型約束等特性。
蘋果推出了 Swift 2.0 版本,為了讓開發(fā)者從 Objective-C 更好地過渡到 Swift 上, 蘋果也為 Objective-C 帶來了 Generics 泛型支持,不過 Objective-C 的泛型約束也 僅停留在編譯器警告階段。

協(xié)議和擴展

Swift 對協(xié)議的支持更加豐富,配合擴展(extension)、泛型、關(guān)聯(lián)類型等可以實現(xiàn)面 向協(xié)議編程,從而大大提高代碼的靈活性。同時,Swift 中的 protocol 還可以用于值類 型,如結(jié)構(gòu)體和枚舉。
協(xié)議和擴展
Objective-C 的協(xié)議缺乏強約束,提供的 optional 特性往往成為很多問題的來源,而如 果放棄 optional 又會讓實現(xiàn)代價過大。

函數(shù)和閉包

Swift 函數(shù)是一等公民,可以直接定義函數(shù)類型變量,可以作為其他函數(shù)參數(shù)傳遞, 可以作為函數(shù)返回值返回。
函數(shù)和閉包
Objective-C 里面函數(shù)仍然是次等公民,需要 selector 封裝或者使用block才能模擬 Swift 中類似的效果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容