1 保证一个变量真的存在并符合一个条件:
缺点:
1.你是在检查一个不符合你期望的条件,而非检查你想要的值。如果你加了一堆像这样的条件判断,代码就变的不好理解。你在这里其实是等着你的条件通不过
2.如果前面条件判断的结果不符合了,你还得将你的变量强制拆包。
func fooManualCheck(x: Int?) {
if x == nil || x <= 0 {
return
}
x!.description
}
2 Swift通过可选绑定 保证一个变量真的存在并符合一个条件:
缺点:
代码都放在了所有条件判断中,而不是之后,如果嵌套了好多需要被匹配的条件判断,这会变得很难读懂。
优点:
解决了1的缺点
func fooBinding(x: Int?) {
if let x = x where x > 0 {
x.description
}
}
2 Swift通过guard 保证一个变量真的存在并符合一个条件:
保镖模式(Bouncer Pattern):
对每个条件逐一做检查,如果不符合条件判断就退出
优点:
1.是对你所期望的条件做检查,而非不符合你期望的。又是和assert很相似。如果条件不符合,guard的else语句就运行,从而退出这个函数
2.如果通过了条件判断,可选类型的变量在guard语句被调用的范围内会被自动的拆包 - 这个例子中该范围是fooGuard函数内部。这是一个很重要,却有点奇怪的特性,但让guard语句十分实用。
3.对你所不期望的情况早做检查,使得你写的函数更易读,更易维护。
func fooGuard(x: Int?) {
guard let x = x where x > 0 else {
return
}
x.description
}
原文:Swift的Guard语句