標籤: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的區別