我和文斯(NSCoding required initializer in inherited classes in Swift)也有同样的问题
我有一个“Source”类和一个“RSSSource”子类。这些类符合NSObject
和NSCoding
,我希望能够用NSKeyedArchiver
持久化它们。
我不知道如何在子类中创建所需的便利init?(coder aDecoder: NSCoder)
。我想把超类的便利性称为init
。
PS:我知道我应该在他的帖子上发表评论,但我不能。(声誉太低)
发布于 2016-03-08 19:47:10
下面是一个简单的例子:
class Source: NSObject, NSCoding {
var name: String?
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(name, forKey: "name")
}
required init?(coder aDecoder: NSCoder) {
name = aDecoder.decodeObjectForKey("name") as? String
}
}
class RSSSource: Source {
var rssName: String?
override func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(name, forKey: "rssName")
super.encodeWithCoder(aCoder)
}
required init?(coder aDecoder: NSCoder) {
rssName = aDecoder.decodeObjectForKey("rssName") as? String
super.init(coder: aDecoder)
}
}
发布于 2016-03-08 20:11:17
我已经试过了,它只是自动添加代码。你不需要自己添加你的代码,否则你想要改变。
示例编码:
required convenience init?(coder aDecoder: NSCoder)
{
fatalError("init(coder:) has not been implemented")
}
https://stackoverflow.com/questions/35865947
复制相似问题