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 中類似的效果。