swift - 如何覆盖 SKScene init(fileNamed : fileNamed)

标签 swift class sprite-kit skscene initializer

我有一个 SKScene 类,我需要在其中实现一个自定义初始化程序来覆盖 SKScene 父类(super class) 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 does not override a designated initializer from its superclass

然而,它是来自父类(super class)的指定初始化器,不是直接父类(super class) SKEffectNode,而是上面的父类(super class) SKNode。在这种情况下,我该如何覆盖初始化程序?

J.

最佳答案

来自SWIFT docs :

Conversely, if you write a subclass initializer that matches a superclass convenience initializer, that superclass convenience initializer can never be called directly by your subclass, as per the rules described above in Initializer Delegation for Class Types. Therefore, your subclass is not (strictly speaking) providing an override of the superclass initializer. As a result, you do not write the override modifier when providing a matching implementation of a superclass convenience initializer.

如果我理解正确,这段代码应该可以工作:

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

关于swift - 如何覆盖 SKScene init(fileNamed : fileNamed),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37488568/

相关文章:

ios - 如何为 setImage() 添加两个图像状态

javascript - 在JS中选择带有文本的div

swift - 在 SpriteKit 中附加 SpriteNode

ios - 在 SpriteKit 中触摸移动的 Sprite

swift - 如何在序列的最后一次出现处拆分字符串

ios - swift 的ios。 fatal error : Unexpectedly found nil while unwrapping an Optional value

swift - 计算直线和 x 轴之间的角度

javascript - 为什么不在类外部/顶部声明变量以避免使用此关键字?

c++ - 模板类成员函数

在设备上运行时的 iOS 8 Beta 3 SpriteKit exc_bad_access