【发布时间】:2014-06-03 19:55:26
【问题描述】:
我刚刚读到init 方法不能用作值。含义:
var x = SomeClass.someClassFunction // ok
var y = SomeClass.init // error
在Language reference 上找到的示例
为什么会这样?这是一种强制语言级别太脏的技巧出现的方法,因为某些连贯性或可能是因为它干扰了另一个功能?
【问题讨论】:
标签: swift
我刚刚读到init 方法不能用作值。含义:
var x = SomeClass.someClassFunction // ok
var y = SomeClass.init // error
在Language reference 上找到的示例
为什么会这样?这是一种强制语言级别太脏的技巧出现的方法,因为某些连贯性或可能是因为它干扰了另一个功能?
【问题讨论】:
标签: swift
与 Obj-C 不同,其中 init 函数可以被多次调用而不会出现问题,在 Swift 中实际上没有称为 init 的方法。
init 只是一个关键字,意思是“以下是构造函数”。在创建新实例期间,始终通过MyClass() 调用构造函数。它永远不会作为方法myInstance.init() 单独调用。您无法获得对底层函数的引用,因为无法调用它。
这也与构造函数不能被继承的事实有关。代码
var y = SomeClass.init
也会破坏子类型,因为子类型不需要具有相同的初始值设定项。
【讨论】:
为什么会这样?
init 是特殊成员,不是常规方法。
除此之外,您没有理由需要将init 存储在变量中。唯一可以以有效方式使用该函数的对象是定义了特定 init 的类的实例,并且任何此类对象在您进行分配之前都已被初始化。
【讨论】:
初始化程序没有返回值。为了将它分配给某些东西,它应该能够返回某些东西 - 但它不能。
【讨论】: