首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >奇怪的MetaType初始化错误

奇怪的MetaType初始化错误
EN

Stack Overflow用户
提问于 2014-12-29 05:30:24
回答 1查看 109关注 0票数 2

我有一个小黄人班级

代码语言:javascript
复制
class GameObject : SKShapeNode {
    var health : Int!
}

class Character : GameObject {
    var cost : Int!
    var movementSpeed : Int!
    var damage : Int!
    var specials : [Special] = []
    required override init() {
        super.init()
    }
}

class Minion : Character {
    required init() {
        super.init()
        self.cost = 2
        self.movementSpeed = 21
        self.damage = 2
        self.path = SKShapeNode(rectOfSize: CGSizeMake(50, 50)).path
        self.fillColor = UIColor.redColor()
    }
}

如果我想实例化这个类的MetaType,我可以这样做。

代码语言:javascript
复制
let a = Minion.self()

没有错误或崩溃。

然而..。如果我试着这么做。

代码语言:javascript
复制
let b = Minion.self
let ax = b() << NO ERROR BUT CRASHES

我收到一个BAD_ACCESS_CODE崩溃。这也会崩溃。

代码语言:javascript
复制
let b : Minion.Type = Minion.self
let ax = b()

有谁有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2014-12-29 07:12:10

在我看来,你已经成功地说服了编译器让你做一些你不应该做的事情。

如果您从层次结构中删除了GameObject类型,而只是让CharacterSKShapeNode继承,那么您的init会出现编译器错误

代码语言:javascript
复制
error: 'required' initializer 'init(coder:)' must be provided by subclass of 'SKShapeNode'
}
^
SpriteKit.SKShapeNode:109:34: note: 'required' initializer is declared in superclass here
  @objc(initWithCoder:) required init?(coder aDecoder: NSCoder)

然而,不知何故,通过在中间插入GameObject而没有用户定义的init方法,它可以让您在编译时摆脱它-但不是在运行时。

看起来您的问题与这个here相似,但不一定相同,相同的解决方案可能会有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27680762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档