2017-06-11 43 views
1

我有以下代碼:選配在超引起子類的初始化問題

class Being { 
    var age: Int? 
} 


class Person: Being { 
    var name: String 
    enum gender { case male, female } 
    var gender: gender 

    init(age: Int, name: String, gender: gender) { 
     super.init() // Error: Property 'self.name' not initialized at super.init call 
     super.age = age 
     self.name = name 
     self.gender = gender 
    } 
} 

但調用super.init()之前初始化self.name產生另一個錯誤(自我beefore super.init調用中使用)

回答

2

如果更換可選的年齡與VAR年齡= 0,你仍然有相同的編譯器錯誤。在更改代碼並重新編譯之前,您可能沒有注意到該錯誤。

的問題是,你必須調用父類的初始化之前初始化類的所有屬性:

init(age: Int, name: String, gender: gender) { 
    self.name = name 
    self.gender = gender 
    super.init() // Error: Property 'self.name' not initialized at super.init call 
    super.age = age 
}