我正在创建一个Circle SKShapeNode类,我正在尝试初始化一个圆圈,但它在super.init
行上给出了一个错误。还有另一种方法可以初始化圆圈吗?谢谢!
class Circle : SKShapeNode {
var radius : CGFloat!
init (pos:CGPoint,rad:CGFloat,color:UIColor) {
super.init(circleOfRadius: 30)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
答案 0 :(得分:0)
我知道这有点老了,但我遇到了与SKScene相同的问题并且认为我可以翻译...
你在这里看到一个错误,因为你试图从超类中调用一个便利函数。规则声明您只能从子类调用超级指定的初始值设定项。为方便起见,您必须使用“自我”。如:
self.init( circleOfRadius: 30 )
但是,如果你还部分实现了init?(coder :)函数的覆盖。如果您实现全部或没有指定的初始值设定项,则子类仅继承超类便捷初始值设定项。那么,删除所需的init?(编码器:)功能。
这应该会给你带来(非常奇怪的)错误:
在self.init电话之前使用'self'。
疯狂地说,在方便函数self.init(circleOfRadius:)
的调用中发生了这个错误答案可以在Darvydas的链接中找到,在第二个答案中:显然,SKxxxxx对象的构造有些破碎。在调用方便的之前,您需要直接调用指定的初始化程序init()。这应该适合你:
class Circle : SKShapeNode {
var radius : CGFloat!
convenience init (pos:CGPoint,rad:CGFloat,color:UIColor) {
self.init()
self.init(circleOfRadius: 30)
}
}
希望能帮助你(或某人......)