swift方便程序初始化错误
问题描述:
我按照WWDC上关于swift初始化程序的建议来执行代码。但是,我看到错误“覆盖声明需要覆盖关键字”。 我错过了什么?swift方便程序初始化错误
但是,在上面的便利初始值设定项中,我看到编译器错误“覆盖声明需要覆盖关键字”。
class FormulaOne: RaceCar{
init(color: Colour, hasTurbo: Bool){
super.init(colour: color, turbo: false);
}
}
当代码与WWDC视频中显示的代码完全相同时,此错误的原因是什么?
答
RaceCar
是压倒由它的超类Car
提供的初始值设定
init(colour: Colour)
。
您需要明确注释该方法,正如错误消息告诉您的一样。
convenience override init(colour: Colour) { ... }
答
当您从Car类继承时,您将继承他的方法,属性和初始值设定项。
这个初始化
init(colour: Colour)
在超类汽车依然实现的,所以你必须写,如果你想更改或添加更多的功能覆盖。
在FormulaOne类中,init函数具有不同的声明。
试图改变从
init(color: Colour, turbo: Bool)
到
init(colour: Colour, turbo: Bool)
编译器告诉你添加convenience
关键字,因为在你实现你打电话self.init
和指定的初始化必须调用super.init
而不是同一类中的另一个init self.init
在Swift中有两种初始化器:指定和方便。 指定的init是主要的init。 便捷初始化是辅助初始化。
约初始化斯威夫特3个规则:
- 指定初始化必须调用指定的初始化从其超
- 便利的init必须调用另一个初始化同一类
- 便利的init最终必须调用指定的init 。
夫特3分所示的规则: