NSCoding:如何在继承 类 中创建所需的初始化
NSCoding : How to create required init in inherited classes
我和文斯有同样的问题(NSCoding required initializer in inherited classes in Swift)
我有一个 class 'Source' 和一个子class 'RSSSource'。论文 classes 符合 NSObject
和 NSCoding
,我希望能够坚持 NSKeyedArchiver
。
我不知道如何在子class中创建所需的便利init?(coder aDecoder: NSCoder)
。我想调用superclass.
的方便init
PS:我知道我应该 post 在他的帖子上发表评论,但我不能。 (声望太低)
这是一个简单的例子:
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)
}
}
我已经试过了,它只是自动添加编码。您不需要自己添加编码,否则您想要更改。
样本编码:
required convenience init?(coder aDecoder: NSCoder)
{
fatalError("init(coder:) has not been implemented")
}
我和文斯有同样的问题(NSCoding required initializer in inherited classes in Swift)
我有一个 class 'Source' 和一个子class 'RSSSource'。论文 classes 符合 NSObject
和 NSCoding
,我希望能够坚持 NSKeyedArchiver
。
我不知道如何在子class中创建所需的便利init?(coder aDecoder: NSCoder)
。我想调用superclass.
init
PS:我知道我应该 post 在他的帖子上发表评论,但我不能。 (声望太低)
这是一个简单的例子:
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)
}
}
我已经试过了,它只是自动添加编码。您不需要自己添加编码,否则您想要更改。
样本编码:
required convenience init?(coder aDecoder: NSCoder)
{
fatalError("init(coder:) has not been implemented")
}