类不实现其超类的必需成员所以我今天更新到Xcode 6 beta 5,并注意到我几乎所有Apple类的子类都收到了错误。错误说明:类'x'不实现其超类的必需成员这是我选择的一个例子,因为这个类目前非常轻量级,因此很容易发布。class InfoBar: SKSpriteNode { //Error message here
let team: Team
let healthBar: SKSpriteNode
init(team: Team, size: CGSize) {
self.team = team if self.team == Team.TeamGood {
healthBar = SKSpriteNode(color: UIColor.greenColor(), size:size)
}
else {
healthBar = SKSpriteNode(color: UIColor.redColor(), size:size)
}
super.init(texture:nil, color: UIColor.darkGrayColor(), size: size)
self.addChild(healthBar)
}}所以我的问题是,为什么我收到此错误,我该如何解决?我没有实施什么?我正在打电话给指定的初始化程序。
3 回答
陪伴而非守候
TA贡献1757条经验 获得超8个赞
来自开发者论坛上的Apple员工:
“向编译器和构建的程序声明你真的不希望与NSCoding兼容的一种方法是做这样的事情:”
required init(coder: NSCoder) { fatalError("NSCoding not supported")}
如果您知道您不希望符合NSCoding,则可以选择此选项。我已经使用了很多我的SpriteKit代码,因为我知道我不会从故事板中加载它。
您可以采用的另一个选项是将方法实现为便利init,如下所示:
convenience required init(coder: NSCoder) { self.init(stringParam: "", intParam: 5)}
请注意调用初始化程序self
。这允许您只需要为参数使用虚拟值,而不是所有非可选属性,同时避免抛出致命错误。
第三种选择当然是在调用super时实现该方法,并初始化所有非可选属性。如果对象是从故事板加载的视图,则应采用此方法:
required init(coder aDecoder: NSCoder!) { foo = "some string" bar = 9001 super.init(coder: aDecoder)}
- 3 回答
- 0 关注
- 570 浏览
添加回答
举报
0/150
提交
取消