在 SKShapeNode 子类中设置非可选属性

Setting non-optional properties in an SKShapeNode subclass

我正在尝试创建一个简单的 SKShapeNode 子类,其中包含一个标签。我已经尝试了几种方法来做到这一点,但我都遇到了错误。

尝试 1

class MyNode: SKShapeNode {
    private var label: SKLabelNode

    init(_ frame: CGRect) {
        super.init()
        self.path = CGPath.init(rect: frame, transform: nil)

        self.label = SKLabelNode(text: "Some text")
        self.addChild(self.label)
    }
}

错误:Property 'self.label' not initialized at super.init call

尝试 2

class MyNode: SKShapeNode {
    private var label: SKLabelNode

    init(_ frame: CGRect) {
        self.label = SKLabelNode(text: "Some text")
        self.addChild(self.label)

        super.init()
        self.path = CGPath.init(rect: frame, transform: nil)
    }
}

错误:'self' used in method call 'addChild' before 'super.init' call


如何在不使用可选属性的情况下创建这个子类并在每次使用它们时强制展开它们?

您不能在调用 super.init 之前调用方法 addChild 所以这是解决方法,

class MyNode: SKShapeNode {
    private var label: SKLabelNode

    init(_ frame: CGRect) {
        self.label = SKLabelNode(text: "Some text")
        super.init()

        self.path = CGPath.init(rect: frame, transform: nil)

        self.addChild(self.label)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}