为什么Swift没有强制我的指定初始化程序调用super?

时间:2015-06-13 16:14:27

标签: swift initialization nsobject

此代码在Swift中是合法的:

class Snapper : NSObject {
    var anim : UIDynamicAnimator
    init(referenceView:UIView) {
        self.anim = UIDynamicAnimator(referenceView:referenceView)
        // super.init()
    }
}

观察我在初始化程序中没有调用super.init();我评论了这一行。但Swift编译器并没有抱怨。为什么?我认为有一个规则,你的指定初始化程序必须调用其超类的指定初始化程序。我有一个超类,即NSObject。

这是一个错误吗?或者将NSObject作为您的超类特殊情况?如果是这样,为什么?我意识到NSObject没有需要初始化的实例变量,但我们怎么知道它的init不做其他需要做的事情呢? Swift不应该在这里给出编译错误吗?

1 个答案:

答案 0 :(得分:3)

这不是原因的答案,但在[NSObject init]上添加符号断点表明,即使super.init()已被注释,它也会被调用。

这绝对是一种特殊情况,因为用任何其他类替换NSObject会使编译器再次警告缺少的超级调用。我的猜测是编译器将其作为特殊情况处理,因为它是我们的基类,只有一个已知的指定初始化器。