我有一个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。在这种情况下如何覆盖初始化程序?
学家
答案 0 :(得分:0)
来自SWIFT docs:
相反,如果编写与超类便捷初始值设定项匹配的子类初始值设定项,则根据上面在类类型的初始化程序委派中描述的规则,您的子类永远不能直接调用该超类便捷初始值设定项。因此,您的子类(严格来说)不提供超类初始化程序的覆盖。因此,在提供超类便捷初始化程序的匹配实现时,不要编写override修饰符。
如果我理解这一点,这段代码应该有效:
convenience init?(fileNamed filename: String)
{
self.init(fileNamed: filename)
}