【问题标题】:Why is 'init' not assignable?为什么'init'不可分配?
【发布时间】:2014-06-03 19:55:26
【问题描述】:

我刚刚读到init 方法不能用作值。含义:

var x = SomeClass.someClassFunction // ok
var y = SomeClass.init              // error

Language reference 上找到的示例

为什么会这样?这是一种强制语言级别太脏的技巧出现的方法,因为某些连贯性或可能是因为它干扰了另一个功能?

【问题讨论】:

    标签: swift


    【解决方案1】:

    与 Obj-C 不同,其中 init 函数可以被多次调用而不会出现问题,在 Swift 中实际上没有称为 init 的方法。

    init 只是一个关键字,意思是“以下是构造函数”。在创建新实例期间,始终通过MyClass() 调用构造函数。它永远不会作为方法myInstance.init() 单独调用。您无法获得对底层函数的引用,因为无法调用它。

    这也与构造函数不能被继承的事实有关。代码

    var y = SomeClass.init
    

    也会破坏子类型,因为子类型不需要具有相同的初始值设定项。

    【讨论】:

      【解决方案2】:

      为什么会这样?

      init 是特殊成员,不是常规方法。

      除此之外,您没有理由需要将init 存储在变量中。唯一可以以有效方式使用该函数的对象是定义了特定 init 的类的实例,并且任何此类对象在您进行分配之前都已被初始化。

      【讨论】:

        【解决方案3】:

        初始化程序没有返回值。为了将它分配给某些东西,它应该能够返回某些东西 - 但它不能。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-24
          • 2021-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多