【问题标题】:Why does SwiftyJSON create implicitly unwrapped optional for its constants?为什么 SwiftyJSON 为其常量创建隐式展开的可选?
【发布时间】:2015-06-13 02:48:52
【问题描述】:

SwiftlyJSON's code 中,它使用强制展开定义了以下常量:

///Error code
public let ErrorUnsupportedType: Int! = 999
public let ErrorIndexOutOfBounds: Int! = 900
public let ErrorWrongType: Int! = 901
public let ErrorNotExist: Int! = 500

在这里将常量声明为隐式展开的可选的目的是什么?

注意:我不是在问为什么或何时使用隐式展开,而是为什么在 SwiftyJSON 中使用它,因为我认为没有理由。

【问题讨论】:

  • 不是重复的——我在问这个之前已经看过这篇文章。我在问为什么需要在 SwiftyJSON 中以这种方式声明常量。
  • 我投票结束这个主要是基于意见。虽然用户可能能够添加关于在一般情况下为什么或为什么不应该这样做的评论,但您正在询问来自特定库的特定案例。除非 SwiftyJSON 作者停下来并提供上帝之手的答案,否则任何其他答案都只能是纯粹的猜想。
  • 从别人的代码中学习是一种合法的编码和学习活动,并且询问为什么某些事情以某种方式完成的问题是有价值的。任何这种性质的问题只能产生纯粹猜想的答案的过分热心的概括不仅是不正确的(谁能说猜想没有价值?),它会阻止提出好的问题。我敦促您重新审视自己的信念以及它将对 SO 社区造成的损害。

标签: swift forced-unwrapping


【解决方案1】:

好吧,也许我错了,当然更好的方法是询问代码的作者。但无论如何,这是我的建议:

  1. 通过归咎于提交,我们可以看到在 2014 年 10 月 6 日所做的更改,并且我们知道 Swift 刚刚发布,可能会出现一些编译器警告或错误:

  1. 实际上,通过编写Int! 而不是Int,我们强制编译器生成ImplicitlyUnwrappedOptional<Int> 类型(并且知道这一事实,我们可以返回到第1 项):

    public let x: Int  = 1
    public let y: Int! = 2
    
    println(x.dynamicType)
    println(y.dynamicType)
    

    输出:

    Swift.Int
    Swift.ImplicitlyUnwrappedOptional<Swift.Int>
    

【讨论】:

  • 感谢您的调查 - 您认为需要什么样的编译器警告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多