Swift中类型中加入了?可选类型,因此在每次进行参数判断的时候都要加入是不是为nil的判断,我们通过简单的字符串判空来看一下guard,if let之间的区别:
func guardCase(data:String?) -> Void {
// 正常判断
if data != nil && (data?.characters.count)! > 0 {
print("guardCase--数据:\(data)")
} else {
print("guardCase--data没有数据")
}
// let 语句
if let result = data, result.characters.count > 0 {
print("let语句:\(result)")
} else {
print("result没有数据")
}
// guard 语句
guard let result = data, result.characters.count > 0 else {
print("guard无数据")
return
}
print("guard数据执行")
}
通过代码我们发现,没有太明显的区别if与if let 一样,guard与 if let 很相似,guard和if都是基于一个表达式的布尔值去判断一段代码是否该被执行,与if语句不同的是,guard只有在条件不满足的时候才会执行这段代码,也可以说是guard先进行错误处理,然后才进行,逻辑执行.
当项目中参数if判断增多,我们可以考虑通过guard来优化一下代码逻辑,方便代码的后续维护:
func guardCaseMulti(name:String?,param:String?) -> Void {
// 正常判断
if name != nil && (name?.characters.count)! > 0 {
if param != nil && (param?.characters.count)! > 0 {
print("guardCaseMulti--数据:\(param)")
} else {
}
} else {
print("guardCaseMulti--data没有数据")
}
// let 语句
if let result = name, result.characters.count > 0,let passWord = param, passWord.characters.count > 0 {
print("let语句:\(result)---\(passWord)")
} else {
print("参数没有数据")
}
// guard 语句
guard let result = name, result.characters.count > 0,let passWord = param, passWord.characters.count > 0 else {
print("guardCaseMulti无数据")
return
}
print("guardCaseMultiguard语句--\(result)---\(passWord)")
}