如何覆盖SKScene init(fileNamed:fileNamed)

时间:2016-05-27 16:42:18

标签: swift class sprite-kit skscene initializer

我有一个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")
    }
}

但它返回错误:Initializer不会覆盖其超类

中的指定初始值设定项

然而,它是来自超类的指定初始化程序,而不是SKEffectNode的直接超类,而是上面的SKNode。在这种情况下如何覆盖初始化程序?

学家

1 个答案:

答案 0 :(得分:0)

来自SWIFT docs

  

相反,如果编写与超类便捷初始值设定项匹配的子类初始值设定项,则根据上面在类类型的初始化程序委派中描述的规则,您的子类永远不能直接调用该超类便捷初始值设定项。因此,您的子类(严格来说)不提供超类初始化程序的覆盖。因此,在提供超类便捷初始化程序的匹配实现时,不要编写override修饰符。

如果我理解这一点,这段代码应该有效:

convenience init?(fileNamed filename: String)
{
    self.init(fileNamed: filename)
}