swift - 为什么 'init' 不可分配?

标签 swift

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

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

Language reference 上找到的示例

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

最佳答案

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

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

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

var y = SomeClass.init

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

关于swift - 为什么 'init' 不可分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24023820/

相关文章:

ios - swift - 错误 'Expected ' ,' separator' 和 'Expected expression in list of expressions'

ios - Xcode 11, swift : Warning Can't end BackgroundTask on open URL

ios - 一切都被正确解析,但一个元素总是拉空,即使它在 Json 中? swift 4.1

ios - 在添加新节点之前删除节点 Swift

ios - 在 Swift 中为 UIButton 设置动画

ios - 将快速扩展标记为公共(public)会将扩展中的属性更改为隐式公共(public)或内部?

swift - 关于 [unowned self] 应该放在哪里的困惑

ios - 堆栈 View 中的 slider 想要调整大小

ios - 为什么在 Playground 和单元测试中不调用 GCD 调度组通知

swift - 如何在 swift 中使用 objective-c-runtime 的 object_getIvar 和 object_setIvar?