我有以下代码:
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
}
}
但是在调用self.name
之前初始化super.init()
会产生另一个错误(自我使用过来的超级电话)
答案 0 :(得分:2)
如果使用var age = 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
}