2014-09-19 92 views
1

我按照WWDC上关于swift初始化程序的建议来执行代码。但是,我看到错误“覆盖声明需要覆盖关键字”。 我错过了什么?swift方便程序初始化错误

​​

但是,在上面的便利初始值设定项中,我看到编译器错误“覆盖声明需要覆盖关键字”。

class FormulaOne: RaceCar{ 
    init(color: Colour, hasTurbo: Bool){ 
     super.init(colour: color, turbo: false); 
    } 
} 

当代码与WWDC视频中显示的代码完全相同时,此错误的原因是什么?

回答

0

RaceCar是压倒由它的超类Car提供的初始值设定

init(colour: Colour) 

您需要明确注释该方法,正如错误消息告诉您的一样。

convenience override init(colour: Colour) { ... } 
1

当您从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个规则:

  1. 指定初始化必须调用指定的初始化从其超
  2. 便利的init必须调用另一个初始化同一类
  3. 便利的init最终必须调用指定的init 。

夫特3分所示的规则:

rules illustrated