无法覆盖泛型类的子类中的初始化程序

时间:2015-08-29 18:48:45

标签: swift generics subclass

我想创建一个泛型类的子类,它本身就是一个子类,但是我无法覆盖初始化器。

澄清:

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的一个错误,还是我误解了泛型类的子类应该如何工作?

1 个答案:

答案 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