iOS假装进步iOSSwift日更

[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 中目前还支持。

加个微信,随时联系 😆

上一篇下一篇

猜你喜欢

热点阅读