2017-09-14 69 views
0

我測試了Swift 3中的繼承並且遇到了意外的錯誤。無論如何改變super.init()調用,我都無法使錯誤跟蹤的問題比這更少。swift 3.1.1錯誤額外的參數'{property}'在調用

我已閱讀過這裏的文檔和其他類似帖子,但他們沒有任何這個特定問題的例子。我正在嘗試創建一個具有變量或常量屬性的類,然後創建另一個繼承自第一個類並添加新屬性的類。

錯誤來自我的子類的init函數:我先設置新的屬性,然後用超類的適當參數調用super.init()。斯威夫特然後告訴我,第三個參數「生日」是一個「額外的論點」。

在我的超類有三個屬性和我的子類有兩個之間存在某種問題?我想不出任何其他可能會導致此類錯誤的問題。不知道哪個部分讓我感到困惑。

這裏是我的代碼:

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是一個額外的參數,因爲(不存在的)閉包是列表中的第四個參數。

Student的初始化不知道什麼nameagebirthday是。您還應該在初始化程序中包含這些參數,最後請致電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) 
}