著作權歸作者所有。
商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
作者:黃兢成
鏈接:http://www.zhihu.com/question/36448325/answer/68614858
來源:知乎
商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
作者:黃兢成
鏈接:http://www.zhihu.com/question/36448325/answer/68614858
來源:知乎
if let 和 guard 只是語法糖,沒有也可以,但有了可以使得代碼更簡潔方便。要理解 if let 和 guard,不妨設想假如沒有這兩者,代碼會怎么寫。
------------------------------------
func doSomething(str: String?)
{
let v: String! = str
if v != nil
{
// use v to do something
}
}
Swift 中因為有optional, 經常需要判斷是否為空。假如沒有if let,大致寫成上面的樣子,有了if let, 可以改寫成
func doSomething(str: String?)
{
if let v = str
{
// use v to do something
}
}
上面兩段代碼的控制流是一樣的。對照着,可以看出if let的寫法更加簡潔方便。
------------------------------------
guard假如if中出現的代碼很長,我們寫代碼時可以將錯誤情況先返回。比如:
func doSomething(str: String?)
{
let v: String! = str
if v == nil
{
return
}
// use v to do something
}
這樣做可以避免過多的嵌套。上面代碼實在太常見了,swift也提供一個guard這個語法糖,用guard可以改寫成:
func doSomething(str: String?)
{
guard let v = str else { return }
// use v to do something
}
上面兩段代碼的控制流是一樣的。也可以看出guard的寫法更加簡潔方便。
------------------------------------
至於if let 和 guard 語法中出現的where,只是附加一些條件。相當於邏輯運算 && 和 ||。SQL中的條件語法也是用where這個關鍵字。
假如還不理解,動手將一段代碼,不用if let 和 guard 進行改寫。試多幾次,就會發覺很自然了。
