知識篇,淺談Swift和OC的區別?

前言

一晃Swift3都出來快一年了,從OC到Swift也經歷了不少,因此對二者的一些使用區別也總結了一點,暫且記錄下,權當本身的一個筆記。html

固然其中一些區別可能你們都有耳聞,因此這裏也會結合自身的一些日常記錄,稍許整理,才誕生了本篇文章,中間或許會有不對之處,還望指出來,共同進步。編程

正文

1、Swift和Objective-C的聯繫swift

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

iOS OC和Swift進行互相調用

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

可是:現階段Swift 到底能不能取代 Objective-C?app

答案是還不行。框架

其實到如今爲止 Swift 離徹底替代 Objective-C 仍是很遙遠,由於 Apple 內部一直在用 Objective-C 來作一些 Framework 的開發,底層也不可能用 Swift 實現,因此如今更多的替代是體如今外部開發。函數式編程

2、Swift比Objective-C有什麼優點?函數

一、Swift容易閱讀,語法和文件結構簡易化。oop

二、Swift更易於維護,文件分離後結構更清晰。

三、Swift更加安全,它是類型安全的語言。

四、Swift代碼更少,簡潔的語法,能夠省去大量冗餘代碼

五、Swift速度更快,運算性能更高。

3、Swift目前存在的缺點

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

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

三、社區的開源項目偏少,畢竟OC獨大好多年,不少優秀的類庫都不支持Swift,不過這種情況正在改變,如今有好多優秀的Swift的開源類庫了

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

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

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

七、對於不支持Swift的一些第三方類庫,若是非得使用,只能混合編程,利用橋接文件實現。

4、Swift其餘功能說明

一、Swift的內存管理

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

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

Swift引入了可選項類型,用於處理變量值不存在的狀況。Optionals相似於OC中指向nil的指針,可是適用於全部數據類型,而非僅僅侷限於類,Optionals相比於OC中的nil指針,更加安全和簡明,而且也是Swift諸多最強大功能的核心。

三、Swift中的 !和  ?

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

四、Swift中範型的簡單說明

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

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

image

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

func isStringEqual(x:String,y:String) -> Bool { return x == y
}</pre>
複製代碼

複製代碼

咱們能夠利用範型合併一下:

image

 View Code

這樣,當咱們使用時,咱們若是將兩個不一樣類型的數進行比較,編譯器會立刻提醒咱們,從而快速避免這種狀況。

image

五、Swift的訪問權限變動

swift新增了兩種訪問權限,權限更細化。具體查看這裏:

訪問權限 **由大到小 **依次爲:open,public,internal(默認),fileprivate,private

六、Swift Foundation框架

爲了方便使用,Swift的基本類型均可以無縫轉換到 Foundation 框架中的對應類型。

由於 Cocoa 框架所接受和返回的基本數據類型都是自身框架內的類型,也就是 Foundation 中所定義的像 NSString,NSNumber,NSArray 等這些東西。而脫離 Cocoa 框架進行 app 開發是不可能的事情。所以咱們在使用 Swift 開發 app 時沒法避免地須要在 Swift 類型和 Foundation 類型間進行轉換。若是須要每次顯式地書寫轉換的話,大概就沒人會喜歡用 Swift 了。還好 Swift 與 Foundation 之間的類型轉換是能夠自動完成的,這使得經過 Swift 使用 Cocoa 時順暢了不少。

並且這個轉換不只是自動的,並且是雙向的,並且不管什麼時候只要有可能,轉換的結果會更傾向於使用 Swift 類型。也就是說,只要你不寫明類型是須要 NS 開頭的類型的時候,你都會獲得一個 Swift 類型。

因此,Swift中的類型和OC的類型對應關係:

String - NSString Int, Float, Double, Bool 以及其餘與數字有關的類型 - NSNumber Array - NSArray Dictionary - NSDictionary

七、Swift便捷的函數式編程

Swift提供了Map、FlatMap、Filter、Reduce等函數方法,可以大大方便咱們對對象處理。

舉例最簡單的場景:

Map:

var results = [1,3,5,7] let results = values.map ({ (element) -> Int in return element * 2 }) //"[2, 6, 10, 14]"

Filter:

var values = [1,3,5,7,9] let flattenResults = values.filter{ $0 % 3 == 0} //[3, 9]

Reduce:

var values = [1,3,5] let initialResult = 0 var reduceResult = values.reduce(initialResult, combine: { (tempResult, element) -> Int in return tempResult + element }) print(reduceResult) //9

5、其餘補充

========================= swift獨有 ==================== 

一、範圍運算符

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{}

二、獨有的元組類型

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

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

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

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

四、if let 、 guard let 的用法

縮減代碼量,安全處理數據邏輯。

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

一、swift不分.h和.m文件 ,一個類只有.swift一個文件,因此總體的文件數量比起OC有必定減小。

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

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

四、強制類型轉換格式不一樣   OC強轉:(int)a      Swift強轉:Int(a)

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

六、swift的 循環語句中必須加{} 就算只有一行代碼也必需要加 

七、swift的switch語句後面能夠跟各類數據類型了 ,如Int、字符串都行,而且裏面不用寫break(OC好像不能字符串)

八、swift  if後的括號能夠省略:  if a>b {},而OC裏 if後面必須寫括號。

九、swift打印  用print("")    打印變量時能夠  print("(value)"),不用像OC那樣記不少%@,d%等。

十、Swift3的【Any】能夠表明任何類型的值,不管是類、枚舉、結構體仍是任何其餘Swift類型,這個對應OC中的【id】類型。

** 6、Swift的前景**

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

個人理解是:

若是時間能夠,能夠試着學習,最好能試着寫一點代碼,單純的看書或看教程沒太大意義,實踐出真知。

其實最初期的學習,更多的是語法的轉變而已,這裏的難點是不大的,而Swift的思想咱們能夠後期慢慢學習並深刻體會。

最後,我仍是但願Swift發展的愈來愈好,功能和社區完善的更棒。

** 7、附上推薦文章連接:**

一、Swift進階 - 11個技巧

二、不管你是否主力 Swift, 這些事情你均可以瞭解一下 

三、Swift 再等等?個人答案是:快上車

【未完待續 。。。】

  Enjoy~ www.cnblogs.com/yajunLi/p/6…原文連接

相關文章
相關標籤/搜索