如何在 SKScene 中使用另一个变量初始化一个变量
How to initialize a variable using another variable in an SKScene
我希望能够使两个变量可用于整个 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 行遇到错误。
Cannot use instance member 'num' within property initializer; property
initializers run before 'self' is available
这意味着我无法使用该变量,因为它连接到skscene,而且场景还没有完全实现。有没有一种方法可以在不引发错误的情况下声明此变量并使其在 class?
中的任何地方都可评估
由于 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
分别初始化为给定值及其倒数等)。
我希望能够使两个变量可用于整个 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 行遇到错误。
Cannot use instance member 'num' within property initializer; property initializers run before 'self' is available
这意味着我无法使用该变量,因为它连接到skscene,而且场景还没有完全实现。有没有一种方法可以在不引发错误的情况下声明此变量并使其在 class?
中的任何地方都可评估由于 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
分别初始化为给定值及其倒数等)。