2017-09-14 4 views
0

Swift 3で継承をテストしていて、予期しないエラーが発生しました。 super.init()コールをどのように変更しても、これよりも問題の少ないトレースをエラーにすることはできません。swift 3.1.1 ERROR追加の引数 '{property}'を呼び出しました

私はここでドキュメントや他の同様の記事を読んでいますが、この特定の問題の例はありません。私は変数または定数のいずれかのプロパティを持つクラスを作成しようとしているし、最初のクラスから継承し、新しいプロパティを追加する別のクラスを作成しています。

私のサブクラスのinit関数からエラーが発生します。まず、新しいプロパティを設定してから、super.init()をスーパークラスの適切な引数で呼び出します。 Swiftは3番目のパラメータ "birthday"が "余分な議論"だと私に伝えます。

3つのプロパティを持つスーパークラスと2つのサブクラスの間に問題がありますか?私はこのようなエラーを引き起こす可能性のある他の問題について考えることはできません。どの部分が私を混乱させているのかわからない。

は、ここに私のコードです:

class Person { 
    var name: String 
    var age: Int 
    let birthday: String 

    init(name: String, age: Int, birthday: String) { 
     self.name = name 
     self.age = age 
     self.birthday = birthday 
    } 
} 

class Student: Person { 
    var isEnrolled: Bool 
    var numberOfClasses: Int 

    init(isEnrolled: Bool, numberOfClasses: Int) { 
     self.isEnrolled = isEnrolled 
     self.numberOfClasses = numberOfClasses 
     super.init(name: name, age: age, birthday: birthday) { 
      self.name = name 
      self.age = age 
      self.birthday = birthday 
     } 
    } 
} 

答えて

0

はあなたの初期化子は、閉鎖を持っていないので、当然、あなたのアプローチは機能しません。 birthdayは、(存在しない)クロージャがリストの第4引数であるため、余分な引数であると言います。

Studentさんの初期設定がわからないname,またはbirthdayです。それらのパラメータをイニシャライザに含めて、最後にsuper.initと呼ぶべきです。

init(name: String, age: Int, birthday: String, isEnrolled: Bool, numberOfClasses: Int) { 
    self.isEnrolled = isEnrolled 
    self.numberOfClasses = numberOfClasses 

    super.init(name: name, age: age, birthday: birthday) 
} 
関連する問題