Swift3.0基礎 - if let/var 和guard let/var 異同

如果你已經(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
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容