OC中有guard吗??
2020-01-07 本文已影响0人
红色海_
先来看看 Swift 的 guard 关键字
guard 是 Swift 中特有的一个关键字,用于处理一些条件不成立时进行函数打断的操作。 (卫语句)
比如说用户输入的用户名长度为 0 时返回,使用常规的条件判断语句会是这样:
func fun1(userName: String) {
if userName.count > 0 {
// 写你要处理的逻辑
}
}
这样会导致业务逻辑代码被嵌套在判断的括号内,可能导致更深的缩进嵌套,进一步的可以对逻辑进行反方向的优化,即当条件不满足时打断函数的执行:
func fun2(userName: String) {
if userName.count == 0 { return }
// 写你要处理的逻辑
}
Swift 语言的 guard 关键字就是为此而生的并且在语义上也更好理解,看
func fun3(userName: String {
guard userName.count > 0 else {
// 这里是 不满足条件
return
}
// 这里是 满足条件
// 写你要处理的逻辑
}
保证了代码的可读性。
那么OC中使用怎么使用guard呢??
可惜OC中没有 guard 关键字, 但理解了swift 的guard作用机制后再利用C的宏特性实现它也不难。。。
#define oc_guard(__wish__) if (__wish__);
- (void)fun fun:(NSString *)userName {
oc_guard(userName.length) else { return; }
// 写你要处理的逻辑
}