代码之家  ›  专栏  ›  技术社区  ›  grahamcracker1234

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

  •  0
  • grahamcracker1234  · 技术社区  · 8 年前

    我想让两个变量对整个 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行出现了一个错误。

    无法在属性初始值设定项中使用实例成员“num”;所有物 初始值设定项在“self”可用之前运行

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

    1 回复  |  直到 8 年前
        1
  •  1
  •   dfrib    8 年前

    自从 reciprocal 直接取决于 num ,将优先项作为基于后一项的计算属性是有意义的

    class GameScene: SKScene {
    
        let num: CGFloat = 1.5
        var reciprocal: CGFloat { return 1/self.num }
    
        // ...
    
    }
    

    自从 号码 是一个不可变的属性,在运行时永远不会更改,另一种选择是让 互惠的 成为 lazy 变量,第一次使用时计算

    class GameScene: SKScene {
    
        let num: CGFloat = 1.5
        lazy var reciprocal: CGFloat = { return 1/self.num }()
    
        // ...
    
    }
    

    (或者,为 GameScene 号码 互惠的 例如,给定值及其倒数)。