我已经看到了有关此问题的一些讨论,但尚未阅读满意的解释。谁能告诉我为什么这不起作用?
class Parent<T> {
var data:T
init(data:T) {
self.data = data
}
}
class Child : Parent<Int> {}
let c = Child(data: 4)
最后一行给出了错误:
'Child' cannot be constructed because it has no accessible initializers
我真的需要实现初始化方法来调用super
吗?
编辑:
为了提供一些上下文,实际代码看起来更接近下面的代码。我有一个Action
使用泛型的类,因为我还有一点代码可以将动作链接在一起,并且我想使用Swift的类型安全性来确保动作可以链接。然后,我有一堆子类(例如CustomAction
)。我正在寻找一种避免init
在每个子类中覆盖该方法的方法。或者,我想了解为什么这不可能。
class Action<Input, Output> {
var cachedOutput:Output?
init(cachedOutput:Output?) {
self.cachedOutput = cachedOutput
}
}
protocol CustomInput {}
protocol CustomOutput {}
class CustomAction : Action<CustomInput, CustomOutput> {
}
现在可以在Swift 3中使用。现在可以编译我的原始示例。Swift 3语言更改中没有提到这一点,因此我只能假定这是一个错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句