在 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")
}
}
我正在尝试创建一个简单的 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")
}
}