NSCoding
协议规定:
任何需要进行编码的对象类都必须采用NSCoding协议并实现其方法。
两个必需的方法是init?(coder: NSCoder)
和func encode(with: NSCoder)
。
SKSpriteNode
继承自SKNode
,后者符合该协议。当编写一个新的SKSpriteNode
子类时,Xcode的自动完成会建议使用以下代码以满足NSCoding
协议要求:
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
调用super也可以起作用:
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
为什么这段代码在没有实现
encode(with: NSCoder)
的情况下也能够满足NSCoding
的要求?
class MySprite: SKSpriteNode { init() }
,自动完成消息才会被触发。 - peacetype