如何使用SKScene中的另一个变量初始化变量

时间:2016-08-06 17:34:55

标签: swift variables sprite-kit 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行收到错误。

  

无法使用实例成员&#39; num&#39;在属性初始化器内;属性   初始化程序在“自我”之前运行。是可用的

这意味着我无法使用变量,因为它已连接到skscene,并且场景还没有完全实现。有没有办法声明这个变量而不会抛出错误并让它在这个类中的任何地方都可评估?

1 个答案:

答案 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实施您自己的自定义初始值设定项,您可以将numreciprocal初始化为例如给定值及其倒数(。)