【iOS】swift-如何理解 if let 與guard?


著作權歸作者所有。
商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
作者:黃兢成
鏈接:http://www.zhihu.com/question/36448325/answer/68614858
來源:知乎

if let 和 guard 只是語法糖,沒有也可以,但有了可以使得代碼更簡潔方便。要理解 if let 和 guard,不妨設想假如沒有這兩者,代碼會怎么寫。

------------------------------------

if let
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 進行改寫。試多幾次,就會發覺很自然了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM