我使用 Swift 2 和 Xcode 7。
我想知道两者的区别
if condition { ... } else { ... }
和
guard ... else ...
我使用 Swift 2 和 Xcode 7。
我想知道两者的区别
if condition { ... } else { ... }
和
guard ... else ...
真正大的区别是当您进行可选绑定时:
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
出于这个原因,在进入例行程序之前,我经常有一系列的多个语句。
与if
语句一样,guard
根据Boolean
表达式的值执行语句。与if
语句不同,guard
语句仅在不满足条件时运行。你可以把守卫想得更像一个Assert
,但不是崩溃,你可以优雅地退出。
参考和代码示例在这里。
要添加到马特的答案,您可以在单个保护语句中包含几个条件:
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 语句中。