【发布时间】:2015-11-30 19:39:26
【问题描述】:
我使用 Swift 2 和 Xcode 7。
我想知道两者的区别
if condition { ... } else { ... }
和
guard ... else ...
【问题讨论】:
标签: ios swift swift2 guard-statement
我使用 Swift 2 和 Xcode 7。
我想知道两者的区别
if condition { ... } else { ... }
和
guard ... else ...
【问题讨论】:
标签: ios swift swift2 guard-statement
真正大的区别是当您进行可选绑定时:
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 还需要return、break 或类似的东西来退出它发生的代码块,而if 语句则不需要。编译器有助于在那里执行提前退出约定。
与if 语句一样,guard 根据表达式的Boolean 值执行语句。与if 语句不同,guard 语句仅在不满足条件时运行。你可以把守卫想象成一个Assert,但不是崩溃,你可以优雅地退出。
参考和代码示例here。
【讨论】:
要添加到Matt's answer,您可以在单个保护语句中包含多个条件:
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 语句中。
【讨论】: