我有一个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/

10-12 03:53