【发布时间】:2014-09-01 01:58:25
【问题描述】:
在 Swift 中,super 的初始化器应该在当前类的所有属性都被初始化之后调用。然而,这不适用于 Objective-C init,在当前类中初始化属性之前首先调用 super init。
Swift 试图通过强制执行来防止哪些问题?为什么 Objective-C 能够避免 Swift 试图阻止的问题?
【问题讨论】:
-
我还可能提到,在 Objective-C 中你应该在调用超类初始化器之后初始化状态是有充分理由的——因为超类初始化器可能会返回一个不同的对象它被调用的对象。因此,如果您在调用超类初始化程序之前设置了一些状态,它将被设置在错误的对象上(原来的
self,而不是后来的self)。 Swift 没有这个问题,因为 Swift 中的初始化器不能返回除了被调用的对象之外的对象(从 Objective-C 导入的初始化器除外)。
标签: swift