当我尝试在super.init()
或self.name
之前致电self.rating
时,Xcode会显示错误。
如果它们不是可选的,那么在调用super.init()
之前,Class'属性是否需要初始化的规则?
还是有另一个编译原因?
文件说
安全检查1 指定的初始化程序必须确保在委派最新的超类初始化程序之前初始化其类引入的所有属性。
虽然我认为它不适用于可选属性。
var name: String
var photo: UIImage?
var rating: Int
init?(name: String, photo: UIImage?, rating: Int) {
self.name = name
self.rating = rating
super.init()
// If self.name is declared in here, it will makes error.
//self.name = name
self.photo = photo // Optional values are exceptional.
if name.isEmpty || rating < 0 {
return nil
}
}
*已添加*
我知道这是规则。但其他答案并未解释为什么Swift应用此规则。