我希望能够为整个SKScene
以及其中的所有函数提供两个变量。其中一个变量使用另一个来创建其值。我理解为什么我不能这样做,但我不知道它的解决方法。我有这段代码:
class GameScene: SKScene {
let num : CGFloat = 1.25
let reciprocal = 1 / num // <— This Line
override func sceneDidLoad() {
}
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
}
}
但我显然在第4行收到错误。
无法使用实例成员&#39; num&#39;在属性初始化器内;属性 初始化程序在“自我”之前运行。是可用的
这意味着我无法使用变量,因为它已连接到skscene,并且场景还没有完全实现。有没有办法声明这个变量而不会抛出错误并让它在这个类中的任何地方都可评估?
答案 0 :(得分:1)
由于reciprocal
直接取决于num
,因此将先验变为基于后者的计算属性是有意义的
class GameScene: SKScene {
let num: CGFloat = 1.5
var reciprocal: CGFloat { return 1/self.num }
// ...
}
由于num
是一个不可变属性,并且永远不会在运行时更改,另一种方法是让reciprocal
成为lazy
变量,在首次使用时计算
class GameScene: SKScene {
let num: CGFloat = 1.5
lazy var reciprocal: CGFloat = { return 1/self.num }()
// ...
}
(或者,为GameScene
实施您自己的自定义初始值设定项,您可以将num
和reciprocal
初始化为例如给定值及其倒数(。)