2017-09-01 7 views
-1

私はこのスーパー持って、私はいくつかのチュートリアル(多分古いチュートリアルを)見てきましたスウィフトでsuper.init()エディタのプレースホルダは

class SuperCar : Car { 

var doors : String 

override func carDescription() -> String { 
    super.carDescription() 
    return "The made of the car is \(made), model is \(model). The year is \(year), with litres of \(litres) and a horsepower of \(hp). The doors of this car opens like \(doors)" 
} 

init(made: String, model: String, year: Int, litres: Double, hp: Int , doors : String){ 
    // the line below gets the "Editor Placeholder in source file 
    super.init(made: String, model: String, year: Int, litres: Double, hp: Int) 
    self.made = made 
    self.model = model 
    self.year = year 
    self.litres = litres 
    self.hp = hp 
    self.doors = doors 
}} 

をし、彼らサブクラスのinit()に引数がないことを教えてください。しかし、私が使用しているXcodeでは、すべてのスーパークラスの引数を入力する必要があります。

入力後、「ソースファイルのエディタプレースホルダ」という警告が表示され、コードが正しくコンパイルされません。

答えて

1

コードには2つの大きな間違いがあります。あなたは前にサブクラスの保存されたプロパティを初期化する必要が

  1. あなたが最後にあなたをsuper初期化子でではなく種類

を渡す必要がsuper

  • を呼び出しますsuperコールの後にすべてを省略することができます。

    init(made: String, model: String, year: Int, litres: Double, hp: Int , doors : String){ 
         self.doors = doors 
         super.init(made: made, model: model, year: year, litres: litres, hp: hp) 
        } 
    
  • +1

    追加するには、他のプロパティを手動で設定する必要はありません。 super.initがそれらを設定します。 – PeejWeej

    +0

    本当にありがとうございます。私は明らかな間違いに驚いた。 – vadian

    関連する問題