2016-08-06 48 views
0

我希望能夠爲整個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,場面不是招尚未完全實施。有沒有辦法在不拋出錯誤的情況下聲明這個變量,並在該類中的任何地方對它進行評估?

+1

什麼是錯誤信息和'recip'? –

+0

@ÖzgürErsil我用錯誤更新了它。 'recip'只是找到 – grahamcracker1234

回答

1

由於reciprocal直接取決於num,它可以使感,讓之前是基於後者

class GameScene: SKScene { 

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

    // ... 

} 

一個計算的性能,因爲num是不可變的特性,並在運行時將不會改變,另一種選擇是讓reciprocallazy變量,在第一次使用計算機

class GameScene: SKScene { 

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

    // ... 

} 

(或實現自己的自定義初始化爲GameScene,您可以將numreciprocal初始化爲例如一個給定的值和它的倒數)。

+0

這個數字的倒數,現在我收到了這個錯誤:Instance member'num'can not be on type'GameScene' – grahamcracker1234

+0

@ grahamcracker1234 my bad,忘記'self.';嘗試更新的答案。 – dfri

+0

我嘗試過'lazy var'的方式。我沒有運氣,仍然沒有工作。當我嘗試原始方法時,我得到這個錯誤:類型'(NSObject) - >() - > GameScene'的值沒有成員'num' – grahamcracker1234