为什么' init'不可分配?

时间:2014-06-03 19:55:27

标签: swift

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

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

Language reference

上的示例

为什么会这样?它是否是一种强制语言级别的方式,因为它有一些混淆或可能因为它干扰了另一个特征而导致太脏的技巧到位?

3 个答案:

答案 0 :(得分:8)

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

init只是一个关键字含义"以下是构造函数"。在创建新实例期间,始终通过MyClass()调用构造函数。它从未单独作为方法myInstance.init()调用。你无法获得对底层函数的引用,因为它无法调用它。

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

var y = SomeClass.init

也会破坏子类型,因为子类型不需要具有相同的初始化器。

答案 1 :(得分:0)

  

为什么会这样?

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

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

答案 2 :(得分:0)

初始值设定项没有返回值。为了将它分配给某些东西,它应该能够返回一些东西 - 而它却没有。