为了账号安全,请及时绑定邮箱和手机立即绑定

类不实现其超类的必需成员

类不实现其超类的必需成员

千万里不及你 2019-07-25 20:11:24
类不实现其超类的必需成员所以我今天更新到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)}


查看完整回答
反对 回复 2019-07-25
  • 3 回答
  • 0 关注
  • 570 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信