Swift從2014年WWDC發(fā)布以來,已經(jīng)經(jīng)歷了兩年多,版本更新到了3.0。這個蘋果推出的新語言,引發(fā)了一波開發(fā)者的高潮,高潮過去,在國內沒起什么大的波瀾。據(jù)我觀察主要兩個原因,公司項目不支持和版本不穩(wěn)定。但是從蘋果方面而言,用Swift取代OC只是時間問題。這幾個版本的迭代,解決了很多兼容問題,優(yōu)化了很多語法。
Swift一出生就攜有很多語言的優(yōu)秀基因,避開了很多語言的坑(尤其是OC),提高了開發(fā)者的編寫效率,它的語法簡潔且嚴謹,融合了很多語言的特色和優(yōu)點,因此你會看到很多語言的影子。未來幾年,Swift將會變的越來越流行,也會越來越重要。因為java版權的原因,谷歌已經(jīng)醞釀將Swift作為安卓開發(fā)語言(點擊鏈接),IBM云平臺開始支持Swift,影響力如此大的兩家公司加入陣營,相信其他公司不久也會緊隨其后。
我將Swift的語法優(yōu)勢(主要相比較OC而言),總結出以下幾點。
1.簡潔
舉個實際使用最多的例子:單例。
如果用OC寫單例的代碼如下:
static Singleton *sharedSingleton = nil;
+ (instancetype)sharedInstance {
static dispatch_once_t onceToken ;
dispatch_once(&onceToken, ^ {
sharedSingleton = [[self alloc] init] ;
}) ;
return sharedSingleton ;
}
如果用Swift實現(xiàn)的話
static let sharedInstance : Singleton = {
let instance = Singleton()
return instance
}()
或者
static let sharedInstance = Singeton()
2.類型安全
Swift3.0開始,無論高精度->低精度,還是低精度->高精度,包括向上轉換和向下轉換,都需要顯式轉換。
3.可選類型
變量常量不接受空值,如果可能出現(xiàn)空值的情況下使用可選類型。
4.類型推導
Swift可以根據(jù)上下文推導出常量或變量的類型,不用特意聲明。
let intNumber = 2
let doubleNumber = 2.0
根據(jù)所賦的值自動推導出intNumber是Int類型,doubleNumber是Double類型
5.guard語句代替if的多層嵌套
有些時候,我們實現(xiàn)的某條功能路徑,需要滿足好幾個條件,代碼要一層層嵌套。
比如:
if (username) {
if (password) {
if (verification_code) {
NSLog(@"登錄成功");
} else {
NSLog(@"登陸失敗");
}
} else {
NSLog(@"登陸失敗");
}
} else {
NSLog(@"登陸失敗");
}
用Swift表達
guard username == true, password == true, verification_code == true else {
NSLog("登錄失敗")
}
NSLog("登錄成功")
guard后面的條件,只有全部滿足了,代碼執(zhí)行才會往下走,否則進入{}內。它會提早判斷不滿足判斷條件的情況。
6.結構體默認有遍歷構造函數(shù)
圖中可以看到自動生成了一個能夠初始化它所有屬性的構造函數(shù)
7.延遲屬性
延遲加載屬性,僅需要加個關鍵字即可
lazy let files = readData()
實例化時,不會初始化它,只有調用它的時候,才會初始化。
8.計算屬性
專門負責計算的一個微型的方法,他有set和get方法,一個負責設置值,一個負責獲取值
9.屬性觀察器
觀察儲存屬性的變化,可在其變化前和變化后做相應的處理
10.不用頻繁寫import
同一個工程的文件相互之間引用,不用導入
11.簡潔的閉包
12.功能更強大的switch
- switch語句不再只應用于離散的整數(shù),還應用于數(shù)值范圍、浮點數(shù)、字符、字符串
- 每條語句,不用寫 break,編譯器會自動添加
- 單個case多個匹配值
13.泛型
編寫一個方法適用于多種數(shù)據(jù)類型參數(shù)的處理,或暫時確定不了參數(shù)數(shù)據(jù)類型,可以使用泛型語法代替參數(shù)數(shù)據(jù)類型。
比如有個方法,把a的值給b,b的值給a,這種調換不僅限于int,double,還適用于字符串或字符以及數(shù)組等。
func swap<T>(outA a: T, outB b: T) {
var c = a
a = b
b = c
}
“<T>”,尖括號內的T就代表泛型
可以出現(xiàn)在集合、數(shù)組、字典,類、結構體和枚舉中
14.枚舉可關聯(lián)值
打個比方,如果你做個計算機demo,要對計算進行壓棧,壓棧的內容,無非操作數(shù)、一元運算符以及二元運算符,這里就可以聲明一個枚舉,關聯(lián)上數(shù)據(jù)類型。
操作數(shù)只需要一個double,一元和二元運算符關聯(lián)一個要選用的運算符(“+”、“-”等等)的字符串,以及一個運算方法的閉包。
15.命名空間
命名空間關鍵字適用于方法和屬性
- private
- internal(默認)
- public
16.Swift和oc混編
需要橋接頭文件和保護傘頭文件
歡迎指正和補充。