我想创建一个泛型类的子类,它本身就是一个子类,但是我无法覆盖初始化器。
澄清:
class BaseClass {
init(printMe: String) {
print(printMe)
}
}
class GenericClass<T>: BaseClass {
var object: T?
}
class NotGenericClass: GenericClass<NSNumber> {
override init(printMe: String) { // <- Error here
super.init(printMe: printMe)
// More setup
}
}
let a = NotGenericClass(printMe: "Print this")
a.object = NSNumber(int: 1)
NotGenericClass中的override init(printMe: String)
行会出现以下错误:
Initializer does not override a designated initializer from its superclass
如果GenericClass没有采用类型参数,则此代码可以正常工作。这是Swift的一个错误,还是我误解了泛型类的子类应该如何工作?
答案 0 :(得分:1)
在这种情况下,似乎GenericClass
不会自动继承初始值设定项。
这使它起作用:
class GenericClass<T>: BaseClass {
var object: T?
// Explicitly provide an initializer
override init(printMe: String) {
super.init(printMe: printMe)
}
}
从文档的Automatic Initializer Inheritance部分来看,这一点并不清楚,它声称“如果您的子类没有定义任何指定的初始化器,它会自动继承其所有超类指定的初始化器”。您可能需要file a bug。