[swift]亲爱的 Erica,请帮我 guard 变量的值为空的情况

作者:Erica Sadun,原文链接,原文日期:2016-07-07
译者:粉红星云;校对:aaaron7;定稿:千叶知风

你好,
我想知道针对下面这个在 Swift 中出现的特定情况是否有更优雅的解决方法 -- 假设你想要在继续执行后续的代码前,检测一个特定的变量是否为空;通常是会做相反的事情(检测变量是否为有值)。我一般是这么写的:

guard thing == nil else {
   if let thing = thing {
      doSomething(withThing: thing)
    }
   return
}

有没有一个更好的方式来实现呢?我是可以使用 if 语句,但是我喜欢 guard 语句确保验证不通过不执行下面代码。逻辑上如果强制解包也可以,但是。。。(耸肩)

-- Rob

你好,Rob,的确是有简单的多的方法。你用了 if 语句的使用方式套在 guard 中,这样也违背了这个语法的本意 -- 使用 guard 来解包 “thing” 这个变量,失败了就不再执行下面的内容。如果你的 guard 语句的 “else” 下的大括号内容,显著地比一两行要多得多,那你应该是用错了这个语法了。

下面是正确的使用方式:

guard let thing = thing else { return } // 在变量不能被解包的时候退出
doSomething(with: thing) // thing 这个变量现在已经解包了

这个代码遵循了Swift一个常见的模式:使用 guard 映射一个可选变量的值。用guard 映射变量让你可以在当前代码块使用相同的变量名( “thing” )。在通过了 guard 语句的时候,你的变量已经解包了,可以直接使用,不用再检验其值不为nil。

避免强制解包是对的。给自己一个挑战,来确保你代码中的每一个 “!” 都是可行的。

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 15,432评论 4 61
  • 近期可以做的事情【仅供老杨同学参考】 一、2106年一整年的年度回顾可以按照之前提到的六个方向进行逐一反思和回顾:...
    古严Pro阅读 733评论 0 51
  • 毕业前夕,在窝了四年的大学宿舍,干了最后一杯酒,那晚,夏日的燥热难掩我们满腔的激情,午夜十二点钟,我们合着歌谣...
    易梓轩阅读 494评论 0 2
  • 接着36谈永生。 上一评说到太阳系就是三足金乌,就是象, 而且他是大一号的“人”,是得道的“人”,是能长生的。 长...
    林少含阅读 251评论 0 0

友情链接更多精彩内容