[OC] 如何在 OC 中使用类似 Swift 的 guard
2019-11-11 本文已影响0人
BudSwift
Swift 的 guard 关键字
guard 是 Swift 中特有的一个关键字,用于处理一些条件不成立时进行函数打断的操作。比如说,用户输入的用户名长度为 0 时返回,使用常规的条件判断语句会是这样:
func foo1(userName: String) {
if userName.count > 0 {
// 处理想要的逻辑
}
}
这样会导致业务逻辑代码被嵌套在判断的括号内,可能导致更深的缩进嵌套,进一步的可以对逻辑进行反方向的优化,即当条件不满足时打断函数的执行:
func foo2(userName: String) {
if userName.count == 0 { return }
// 处理想要的逻辑
}
Swift 语言的 guard 关键字就是为此而生,并且在语义上也更好理解:
func foo3(userName: String {
guard userName.count > 0 else { return }
// 处理想要的逻辑
}
可以区别在于在条件判断时输入预期的条件,从而写业务时不需要再去反向思考,同时也保证了代码的可读性。
OC 中使用 guard
OC 中没有 guard 关键字,不过在理解了 guard 的作用机制后,再利用 C 的宏特性,也不难实现:
#define xp_guard(__wish__) if (__wish__);
- (void)fooWithUserName:(NSString *)userName {
xp_guard(userName.length) else { return; }
// 处理想要的逻辑
}
延伸
Swift 对 guard 的关键字还有在条件判断时进行值绑定的操作,OC 中目前还支持。