【发布时间】:2023-04-04 11:46:01
【问题描述】:
这是我的代码:
import Foundation
class Person: NSObject, NSCoding {
var name: String
init(name: String) {
self.name = name
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(name, forKey: "name")
}
required convenience init?(coder aDecoder: NSCoder) {
let name = aDecoder.decodeObjectForKey("name") as! String
self.init(name: name)
}
}
class Martin: Person {
init() {
self.init(name: "Martin")
}
required convenience init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
let p = Martin()
print(p.name)
由于某种原因,我总是会遇到 catch-22 的情况,我认为使这项工作正常进行的唯一方法是显式初始化 required convenience init?(coder aDecoder: NSCoder) 中的所有属性以消除便利性并在 @987654324 中执行 super.init(coder: aDecoder) @
我阅读了 Swift 中的 init 规则,仍然不明白为什么 Martin 在这种情况下不能从 Person 继承便利 init。
【问题讨论】: