2014-09-19 91 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