您获得所需的原因是因为您有不可选的变量或在 init 发生之前未初始化的变量。
如果你有需要在 init 函数内部分配的变量,那么你会这样做:
required init?(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
}
但你会问我:Mr Knight0fDragon,它告诉我要更换fileNamed
with coder
,当我切换它时它没有编译。
嗯,这是因为init(fileNamed:)
是一个便利 init,而不是指定 init。为了能够子类化一个类并获得它所有的便利 init,您需要覆盖它的所有指定 init。
现在有了 SKScene,您就有了 3 个,并且您已经了解了 1 个。
让我们覆盖其他 2 个:
override init() {
super.init()
}
override init(size: CGSize) {
super.init(size: size)
}
好吧,现在这只小狗应该可以编译了,我们只需要分配变量即可。
我喜欢做的是为调用 super 后必须在任何版本的初始化中分配的任何变量创建一个设置方法。
不幸的是,我们无法在调用 super 之前对常量执行此操作,因此我们需要在每个方法中设置这些常量。原因是self
尚未完全存在。
这最终看起来像这样:
let constant : String
required init?(coder aDecoder: NSCoder)
{
constant = "hi"
super.init(coder: aDecoder)
setup()
}
override init() {
constant = "hi"
super.init()
setup()
}
override init(size: CGSize) {
constant = "hi"
super.init(size: size)
setup()
}