guard是swift2.0新引入的关键字,用于条件判断处理语句。
具体怎么用,我们一步一步来。
对参数进行验证,全部通过才能够执行某条语句,我们最可能会这样写:
func printName(firstName:String?,_ lastName:String?){
if firstName != nil {
if lastName != nil{
print("\(firstName) \(lastName)")
}
}
}
只有在firstName和lastName都不为nil时,才打印。如果参数过多,嵌套会显得很复杂,所以又有了以下的做法:
func printNameByIf(firstName:String?,_ lastName:String?){
if firstName == nil{
return
}
if lastName == nil {
return
}
print("\(firstName) \(lastName)")
}
但是可读性仍然不高,if语句的意图依旧不够明确。并且,对于 Optional 类型的值,也没有进行很好的处理。因此,在swift2.0中引入guard:
func printNameByGuard(firstName:String?,_ lastName:String?){
guard let first = firstName else{
return
}
guard let last = lastName else{
return
}
print("\(first) \(last)")
}
这里用到了 guard 关键字,来进行参数条件的判断。比起之前的 if 判断,代码的可读性更强,并且意图更加明确。 guard 还有一个好处就是对于 Optional 的解包的作用域是在函数内完全可见的。 比如上例中,我们解包出的 first 和 last,可以在 guard 执行完后,继续使用。
除了用在参数判断返回的场景下,还能用在很多别的地方:
guard app.characters.count > 0 else {
throw InputError.NameIsEmpty
}
guard #available(iOS 8, *) else {
return
}