我有一个小黄人班级
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,我可以这样做。
let a = Minion.self()没有错误或崩溃。
然而..。如果我试着这么做。
let b = Minion.self
let ax = b() << NO ERROR BUT CRASHES我收到一个BAD_ACCESS_CODE崩溃。这也会崩溃。
let b : Minion.Type = Minion.self
let ax = b()有谁有什么想法吗?
发布于 2014-12-29 07:12:10
在我看来,你已经成功地说服了编译器让你做一些你不应该做的事情。
如果您从层次结构中删除了GameObject类型,而只是让Character从SKShapeNode继承,那么您的init会出现编译器错误
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相似,但不一定相同,相同的解决方案可能会有所帮助。
https://stackoverflow.com/questions/27680762
复制相似问题