-4

我使用 Swift 2 和 Xcode 7。

我想知道两者的区别

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

guard ... else ...
4

3 回答 3

4

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

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出于这个原因,在进入例行程序之前,我经常有一系列的多个语句。

于 2015-11-30T19:54:36.993 回答
2

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

参考和代码示例在这里

于 2015-11-30T19:42:29.953 回答
0

要添加到马特的答案,您可以在单个保护语句中包含几个条件:

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

于 2015-11-30T20:50:41.400 回答