Swift:我的通用子类不继承初始化器

时间:2015-10-04 10:04:39

标签: swift generics inheritance initialization initializer

我认为这两个类符合继承初始化程序的规则:

class Butt1 : UIButton {}
class Butt2<T> : UIButton {}

let butt1 = Butt1() // ok
let butt2 = Butt2<Void>() // error: no accessible initializer

文档说:

  

如上所述,子类不会继承它们的超类   默认情况下初始化程序但是,超类初始化器是   如果满足某些条件,则自动继承。在实践中,   这意味着您不需要在许多中编写初始化程序覆盖   常见场景,可以继承你的超类初始化器   只要安全就可以做到最小的努力。

     

假设您为任何新属性提供默认值   在子类中引入,适用以下两个规则:

     

规则1 如果您的子类未定义任何指定的初始值设定项,则为   自动继承其所有超类指定的初始化器。

     

规则2 如果您的子类提供了所有子类的实现   超类指定初始化程序 - 通过按照继承它们   规则1,或通过提供自定义实现作为其一部分   定义 - 然后它自动继承所有的超类   便利初始化者。

Butt2的情况下,编译器不认为“这样做是安全的”,但为什么不安全呢?

0 个答案:

没有答案