guard关键字到底好在哪里?

作者: 谁在丛中笑 | 来源:发表于2016-12-11 12:25 被阅读163次

    请注意:本文适用于Swift 2,IOS9,以及Xcode7.请确保你已经安装了Xcode7.

    曾经的样子:pyramids of doom
    当一个方法运行的时候,如果要处理需要的情况,通常有两种解决方式:pyramids of doom 或者 early returns。

    if firstName != "" {
        if lastName != "" {
            if address != "" {
                // do great code
            }
        }
    }
    

    这就叫做a pyramid of doom

    后者看起来是这样

    if firstName == "" { return }
    if lastName == "" { return }
    if address == "" { return }
    // do great code
    

    这项技术叫做early returns,因为你从方法中尽可能早的返回了,这意味着你如果一直处在方法中,一切都是安全的。
    以上这两种方法都不是很好,第一种过于混乱,而且你的判断越多情况就越糟糕。
    第二种,可读性不强,这种方法判断的是相反的条件,我们需要有值的first name,所以检查空string是反向判断。
    在swift中还有另外一个问题,就是对optional的处理。
    在swift2中,出现了guard,它有如下好处:
    1,你的目的明确,你可以告诉guard你需要的情况,而不是反过来,易于理解。
    2,任何optional值被guard解包后,一直存在(即便guard已经结束了),所以你依旧可以使用。(在if中如果if结束了,还要重新解包)。

    当你要使用if的时候,可以先尝试使用一下guard

    guard name.characters.count > 0 else {
        throw InputError.NameIsEmpty
    }
    
    guard age > 18 else {
        return false
    }
    
    guard #available(iOS 9, *) else {
        return
    }
    
    func printName() {
        guard let unwrappedName = name else {
            print("You need to provide a name.")
            return
        }
    
        print(unwrappedName)
    }
    

    最后一个例子说明了关于optional的好处,也是guard相对于early returns 关键的一个优势。

    原文链接
    https://www.hackingwithswift.com/new-syntax-swift-2-guard

    相关文章

      网友评论

        本文标题:guard关键字到底好在哪里?

        本文链接:https://www.haomeiwen.com/subject/vmqpmttx.html