Jad*_*Jad 16 inheritance init swift
问题
Override 子类的便利初始化程序,它会产生编译错误.
详情
我有问题理解为什么Swift(v4.1)不允许我覆盖我的便利初始化器.阅读文档我发现这两条规则适用于我的问题:
规则1如果您的子类没有定义任何指定的初始值设定项,它会自动继承其所有超类指定的初始值设定项.
规则2如果您的子类提供了所有超类指定初始值设定项的实现 - 通过按照规则1继承它们,或者通过提供自定义实现作为其定义的一部分 - 那么它会自动继承所有超类便捷初始值设定项.
在下面的代码中,我属于第一个规则,我的所有便利初始化程序都被继承ClassB.此外,由于我按照规则1继承了所有指定的初始化程序,因此我也继承了所有便利初始化程序.
class ClassA<T> {
// This array would be private and not visible from ClassB
var array: [T]?
init() { }
convenience init(array: [T]) {
self.init()
self.array = array
}
}
class ClassB<T>: ClassA<T> {
var anotherArray: [T]?
// I feel like I should include the "override" keyword
// but I get a compiler error when "override" is added before "convenience init".
convenience init(array: [T]) {
self.init()
self.anotherArray = array
}
}
// Works fine
let instanceA = ClassA(array: [1, 2])
// Compile error when override is added:
// error: Initializer does not override a designated initializer from its superclass
// note: attempt to override convenience initializer here
// convenience init(array: [T]) {
// ^
let instanceB = ClassB(array: [1, 2])
Run Code Online (Sandbox Code Playgroud)
但这是我不明白的:ClassB有一个稍微不同的实现,init(array:)我想覆盖该便利初始化程序.使用该override关键字会产生编译错误.我是否错误地理解了这些初始化概念?
| 归档时间: |
|
| 查看次数: |
9027 次 |
| 最近记录: |