请参见“自动初始化继承”:
规则1 如果子类没有定义任何指定的初始化器,它将自动继承其所有超类指定的初始化器。
规则2
如果您的子类提供了其所有超类指定初始化器的实现(通过按规则1继承它们,或通过提供自定义实现作为其定义的一部分),则它会自动继承所有超类便利性初始化器。
在您的示例中,子类
B没有自行定义任何初始化程序,因此它 继承了的
所有初始化程序
A,包括所需的初始化程序。如果
B仅定义便捷初始化程序(现在已针对 Swift 2进行了 更新),则同样如此:
class B: A { convenience init(str : String) { self.init(num: Int(str)!) } func haveFun() { print("Woo hoo!") }}但是,如果子类定义了任何指定的(=非便捷性)初始化器,则它不再继承超类初始化器。特别是所需的初始化器不会被继承,因此不会编译:
class C: A { init(str : String) { super.init(num: Int(str)!) } func haveFun() { print("Woo hoo!") }}// error: 'required' initializer 'init(num:)' must be provided by subclass of 'A'如果您
required从
A的init方法中删除from,那么类
C也会进行编译。



