如果你已經(jīng)對Swift精通,請略過此文,不惜勿噴,謝謝!
Swift在我心目中的地位: Swift是一門將要替代OC,并且正在替代OC,必然要替代OC的語言;作為一個iOS開發(fā)者,如果不想被淘汰,就必須要學Swift;
--
Swift里邊有一個特殊的存在--可選項,我們知道可選項變量在具體使用的時候必須要解包. 在解包的時候就要注意了,如果在強制解包的時候,可選項變量是nil,在運行時就會崩潰(編譯器不會報錯)!
針對這個問題蘋果做了兩個句式: if let/var guard let/var
下面根據(jù)一個例子說明兩個句式的使用環(huán)境和異同
//兩個可選項
var optionalName: String? = "John Appleseed"
var greeting: String? = "Hello!"
//需求: 拼接兩個字符串
1 有同學就想直接用"+"連接就好了(此處須強制解包),代碼如下:
optionalName! + greeting!
但是如果optionalName = nil時候,強制解包會崩潰,如何避免此崩潰呢?
2 你可能會想到在解包前做一個判斷就好了,代碼如下:
if optionalName != nil && greeting != nil {
optionalName! + greeting!
}
對的,當然可以這樣!
但是本文的重點是怎么用 if let/var 和 guard let/var
3 用if let/var 和 guard let/var,代碼如下:
// if let 代碼
if let name = optionalName, let greet = greeting {
name + greet
}
// guard let 代碼
guard let name = optionalName, let greet = greeting else {
return
}
name + greet
是不是比 2 里邊的代碼優(yōu)雅許多!
相同點: 都可以用來判斷一個可選項是不是空
不同點:
1 新賦值的變量的作用域不同 if let/var 創(chuàng)建的變量的作用域是 花括號里邊 例如3中的name和greet;而guard let/var創(chuàng)建的變量作用域是 guard let/var 語句下邊
2 if let/var 創(chuàng)建的變量名字可以與原變量名相同,guar let/var 不行
錯誤如下:

guar let_錯誤.png

if let_正確.png