Ios 保安行动快艇2

Ios 保安行动快艇2,ios,swift,swift2,guard-statement,Ios,Swift,Swift2,Guard Statement,我使用Swift 2和Xcode 7 我想知道两者之间的区别 if condition { ... } else { ... } 及 与if语句类似,guard基于表达式的布尔值执行语句。与if语句不同,guard语句仅在不满足条件时运行。您可以将guard更像是一个断言,但您可以优雅地退出,而不是崩溃 参考和代码示例。真正的区别在于,当您执行可选绑定时: if let x = xOptional { if let y = yOptional { // ... and

我使用Swift 2和Xcode 7

我想知道两者之间的区别

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


if
语句类似,
guard
基于表达式的
布尔值执行语句。与
if
语句不同,
guard
语句仅在不满足条件时运行。您可以将guard更像是一个
断言
,但您可以优雅地退出,而不是崩溃


参考和代码示例。

真正的区别在于,当您执行可选绑定时:

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 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语句中。

请参阅我的书以进一步讨论:下面是一个实用的代码示例:另一个(我的代码中充满了这类内容):
guard
还需要一个
return
break
或类似的东西,以退出出现它的代码块,其中
if
语句没有。编译器有助于在那里强制执行早期退出约定。@BradLarson,这就是绑定在顶级作用域中的原因:如果我们到达下一行,我们可以保证条件已通过,即我们没有提前退出,或者根本不在这里。绑定可能重复
guard x > 0 else { return }