【问题标题】:Should I choose optionals or implicitly unwrapped optionals我应该选择选项还是隐式展开的选项
【发布时间】:2014-11-28 19:52:55
【问题描述】:

假设您需要编写将闭包作为参数之一的函数,以将其作为回调调用。这个函数的用户应该能够传递nil 而不是闭包。在这种情况下,你会使用可选项还是隐式展开的可选项?

提前致谢。

【问题讨论】:

    标签: ios swift optional


    【解决方案1】:

    作为对 Nate 的回答(这是 imo 解决方案)的补充,我的建议是永远不要使用隐式展开的选项,除非你有充分的理由。延迟初始化是一个很好的理由。

    • 如果不确定,请不要使用它

    • 如果可选项在其初始化后的生命周期内可以为 nil,则不要使用它

    • 如果您想避免输入额外的?,请不要使用它

    • 如果第 3 方函数、方法或闭包传递了可选项,请不要将其转换为隐式展开

    • 如果第 3 方函数、方法或闭包提供隐式解包...自行判断是否显式检查 not nil(即是否相信该 optional 将始终不是 nil)

    • 更一般地说,如果您对隐式展开的工作方式有疑问,最好始终避免

    【讨论】:

      【解决方案2】:

      这里一定要使用可选的,因为期望它可能是nil。当使用隐式展开的选项时,其目的是在使用它们时它们永远不会是nil - 典型示例是@IBOutlet 属性,这些属性不能在初始化程序中创建,但将通过在 viewDidLoad 中使用之前的故事板。

      【讨论】:

      • 但我可以使用 handler?() 语法以防隐式解包选项
      • @FrozenHeart 您愿意使用handler?() 语法并不是使用隐式展开可选的情况。您也可以将该语法与标准可选项一起使用,标准可选项使您的意图更加明确。我同意 Nate 的观点,标准可选在这里似乎更合适。
      猜你喜欢
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多