我有一个skscene类,在这个类中,我需要实现一个自定义初始值设定项,它覆盖skscene超类sknode的初始值设定项init(filenamed:filenamed),以便执行一些专有的初始化,但保留init(filenamed:filenamed)提供的从接口生成器加载场景的可能性。
我找不到正确的语法。我试过以下方法:
class Try: SKScene
{
override init(fileNamed: String)
{
super.init(fileNamed: fileNamed)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
但它返回错误:初始值设定项不会从其超类重写指定的初始值设定项
但是,它是来自超类的指定初始值设定项,而不是skeffectnode的直接超类,而是sknode的直接超类。在这种情况下,如何重写初始值设定项?
J.
最佳答案
从SWIFT docs开始:
相反,如果您编写的子类初始值设定项与超类便利初始值设定项匹配,则子类永远无法直接调用该超类便利初始值设定项,如上文在类类型的初始值设定项委派中所述。因此,您的子类(严格地说)没有提供超类初始值设定项的重写。因此,在提供超类便利初始值设定项的匹配实现时,不会编写重写修饰符。
如果我理解这一点,这段代码应该可以工作:
convenience init?(fileNamed filename: String)
{
self.init(fileNamed: filename)
}
关于swift - 如何重写SKScene init(fileNamed:fileNamed),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37488568/