inheritance - swift 子类*总是*必须调用 super.init()

标签 inheritance swift

如果我有一个 swift 子类:

  1. 不需要访问self
  2. 不需要访问self的任何属性

我还需要在子类的init()方法中调用super.init()吗?

*注意:这是一个不同于提问和回答的问题 here on SO因为上面 1 和 2 中列出的细节。

最佳答案

不,你不必。

假设您有以下类(class)。

class a {
    let name: String

    init() {
        name = "james"
    }
}

class b: a {
    let title: String

    override init() {
        title = "supervisor"
    }
}

如果你用

实例化一个变量

让 myVar = b()

然后,

  • override init() in b 将被调用
  • 然后调用a中的init()

即使您没有显式调用 super.init()


Chris Laettner 在 swift 用户的电子邮件列表中确认了这一点。 当您的父类(super class)有一个带有零参数初始化的指定初始化程序时,它就会启动。这就是为什么从 NSObject 派生时不必调用 super.init() 的原因。

*感谢 Wingzero 在下方的评论

关于inheritance - swift 子类*总是*必须调用 super.init(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25257224/

相关文章:

c++ - 在继承层次结构中使用 boost::shared_ptr

c++ - 死亡钻石和范围解析运算符 (c++)

ios - 如何使用选项字典关闭 Swift 中的核心数据预写日志记录?

ios - 为什么自定义委托(delegate)协议(protocol)包含可选值 - SWIFT

ios - 通过带约束的自调整大小来展开和折叠 TableView 单元格

c# - 继承疑点

python类默认值继承

java - Java类中的super关键字是否编译为this.getClass.getSuperClass()...?

SwiftUI:类型不符合协议(protocol) 'UIViewRepresentable'

swift - 如何让函数在 Swift 中播放不同的声音