gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:59:55 25 4
gpt4 key购买 nike

我想创建一个泛型类的子类,该泛型类本身就是一个子类,但我不能重写初始化器。

澄清一下:

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

最佳答案

在这种情况下,GenericClass 似乎不会自动继承初始化器。

这使它工作:

class GenericClass<T>: BaseClass {
var object: T?
// Explicitly provide an initializer
override init(printMe: String) {
super.init(printMe: printMe)
}
}

这在 Automatic Initializer Inheritance 中并不清楚文档的一部分,它声称​​“如果你的子类没有定义任何指定的初始化器,它会自动继承它的所有父类(super class)指定的初始化器”。你可能想要 file a bug .

关于swift - 无法覆盖泛型类的子类中的初始化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32289603/

25 4 0
文章推荐: css - 多语言网站和 CSS 字体系列
文章推荐: javascript - Google Analytics 跟踪导致服务器问题的事件
文章推荐: html - 如何仅在 CSS 中制作此箭头?
文章推荐: javascript - 将
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com