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

Why doesn't Swift force my designated initializer to call super?

此代码在 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 不应该在这里给出编译错误吗?

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

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