【问题标题】:Difference between a type and an explicitly unwrapped type in SwiftSwift 中类型和显式解包类型之间的区别
【发布时间】:2014-09-24 16:47:24
【问题描述】:

这真的让我很困惑:隐式展开的可选项和类型本身有什么区别?

例如,

var s:String!
var s2: String

这两个不完全一样吗?它们代表一个不能为 nil 的字符串,那么我们到底为什么需要 !东西?

【问题讨论】:

    标签: swift optional


    【解决方案1】:

    隐式展开的可选是一个可选,实际上你可以分配一个nil

    var s: String! = nil
    

    但是声明为隐式解包,您不必每次使用它时都附加?,因此,正如其名称所述,它是隐式解包的,因为它应该包含一个非零值。

    后果:如果隐式展开为 nil,则很可能在您的代码中使用它时会生成运行时异常 - 例如:

    let s: String! = nil
    var s1: String = s // Execution was interrupted, reason: EXC_BAD_INSTRUCTION ...
    

    问题可能变成:为什么存在隐式展开的选项?答案是他们需要Resolving Strong Reference Cycles Between Class Instances,以及其他一些情况。

    我个人会避免在我的代码中声明隐式展开的变量,除非我有很好的理由(例如解决引用循环,如上所述)

    【讨论】:

      猜你喜欢
      • 2019-03-07
      • 2012-12-09
      • 1970-01-01
      • 2021-01-12
      • 2013-11-17
      • 1970-01-01
      • 2013-10-05
      • 2016-09-28
      • 2016-11-12
      相关资源
      最近更新 更多