超类中的Optionals导致子类初始化程序出现问题

时间:2017-06-11 18:29:20

标签: swift xcode optional

我有以下代码:

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()会产生另一个错误(自我使用过来的超级电话)

1 个答案:

答案 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
}