![](/img/trans.png)
[英]Swift Must call a designated initializer of the superclass uiinputviewcontroller
[英]Swift - Must call a designated initializer of the superclass SKSpriteNode error
此代码在第一个 XCode 6 Beta 上工作,但在最新的 Beta 上它不起作用并出现此类错误Must call a designated initializer of the superclass SKSpriteNode
:
import SpriteKit
class Creature: SKSpriteNode {
var isAlive:Bool = false {
didSet {
self.hidden = !isAlive
}
}
var livingNeighbours:Int = 0
init() {
// throws: must call a designated initializer of the superclass SKSpriteNode
super.init(imageNamed:"bubble")
self.hidden = true
}
init(texture: SKTexture!) {
// throws: must call a designated initializer of the superclass SKSpriteNode
super.init(texture: texture)
}
init(texture: SKTexture!, color: UIColor!, size: CGSize) {
super.init(texture: texture, color: color, size: size)
}
}
这就是这个类的初始化方式:
let creature = Creature()
creature.anchorPoint = CGPoint(x: 0, y: 0)
creature.position = CGPoint(x: Int(posX), y: Int(posY))
self.addChild(creature)
我被它困住了..最简单的解决方法是什么?
init(texture: SKTexture!, color: UIColor!, size: CGSize)
是 SKSpriteNode 类中唯一的指定构造器,其余都是便利构造器,所以不能调用 super 。 将您的代码更改为:
class Creature: SKSpriteNode {
var isAlive:Bool = false {
didSet {
self.hidden = !isAlive
}
}
var livingNeighbours:Int = 0
init() {
// super.init(imageNamed:"bubble") You can't do this because you are not calling a designated initializer.
let texture = SKTexture(imageNamed: "bubble")
super.init(texture: texture, color: UIColor.clearColor(), size: texture.size())
self.hidden = true
}
init(texture: SKTexture!) {
//super.init(texture: texture) You can't do this because you are not calling a designated initializer.
super.init(texture: texture, color: UIColor.clearColor(), size: texture.size())
}
init(texture: SKTexture!, color: UIColor!, size: CGSize) {
super.init(texture: texture, color: color, size: size)
}
}
此外,我会将所有这些合并到一个初始值设定项中。
疯狂的东西..我不完全明白我是如何设法修复它的..但这有效:
convenience init() {
self.init(imageNamed:"bubble")
self.hidden = true
}
init(texture: SKTexture!, color: UIColor!, size: CGSize) {
super.init(texture: texture, color: color, size: size)
}
为init
增加convenience
并删除init(texture: SKTexture!)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.