守卫行动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 语句中。
我使用 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 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 语句中。