我刚刚读到init
方法不能用作值。含义:
var x = SomeClass.someClassFunction // ok
var y = SomeClass.init // error
上的示例
为什么会这样?它是否是一种强制语言级别的方式,因为它有一些混淆或可能因为它干扰了另一个特征而导致太脏的技巧到位?
答案 0 :(得分:8)
与Obj-C不同,init
函数可以多次调用而没有问题,在Swift中实际上没有名为init
的方法。
init
只是一个关键字含义"以下是构造函数"。在创建新实例期间,始终通过MyClass()
调用构造函数。它从未单独作为方法myInstance.init()
调用。你无法获得对底层函数的引用,因为它无法调用它。
这也与构造函数不能被继承的事实有关。代码
var y = SomeClass.init
也会破坏子类型,因为子类型不需要具有相同的初始化器。
答案 1 :(得分:0)
为什么会这样?
init
是一个特殊成员,而不是常规方法。
除此之外,您没有理由需要将init
存储在变量中。唯一可以以有效方式使用该函数的对象是定义了特定init
的类的实例,并且在您可能进行赋值之前,任何此类对象都已经初始化。
答案 2 :(得分:0)
初始值设定项没有返回值。为了将它分配给某些东西,它应该能够返回一些东西 - 而它却没有。