守卫行动Swift 2

Guard operation Swift 2

我使用 Swift 2 和 Xcode 7.

我想知道两者的区别

if condition { ... } else { ... } 

guard ... else ...

if 语句一样,guard 根据表达式的Boolean 值执行语句。与 if 语句不同,如果不满足条件,guard 语句仅 运行。你可以把 guard 想得更像一个 Assert,但你可以优雅地退出,而不是崩溃。

参考和代码示例here

真正的大区别是当您进行可选绑定时:

if let x = xOptional {
    if let y = yOptional {
        // ... and now x and y are in scope, _nested_
    }
}

对比一下:

guard let x = xOptional else {return}
guard let y = yOptional else {return}
// ... and now x and y are in scope _at top level_

出于这个原因,在我进入例程的核心之前,我经常有多个连续的 guard 语句。

要添加到 ,您可以在单个 guard 语句中包含多个条件:

guard let x = xOptional, y = yOptional else { return }
// ... and now x and y are in scope _at top level_

除了可选绑定之外,保护条件还可以测试布尔结果:

guard x > 0 else { return }

简而言之,guard 语句的好处是使提前退出在作用域的开头显而易见,而不是将条件隐藏在嵌套的 else 语句中。