2016-08-06 7 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, и сцена hasn еще не реализована. Есть ли способ объявить эту переменную без ошибки и сделать ее оцениваемой повсюду внутри этого класса?

+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 является непреложной собственностью и никогда не будет меняться во время выполнения, другая альтернатива чтобы reciprocal быть lazy переменной, вычисленная на его первом использовании

class GameScene: SKScene { 

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

    // ... 

} 

(Или, реализовать свой собственный инициализатор для GameScene, где вы можете инициализировать num и reciprocal, например. заданное значение и его обратное, соответственно).

+0

, теперь я получаю эту ошибку: член экземпляра 'num' нельзя использовать для типа 'GameScene' – grahamcracker1234

+0

@ grahamcracker1234 my bad, забудьте' self.'; попробуйте обновленный ответ. – dfri

+0

Я раньше пробовал 'lazy var'. Мне не повезло, все равно не работает. Когда я пытаюсь использовать оригинальный метод, я получаю эту ошибку: Значение типа '(NSObject) ->() -> GameScene' не имеет члена 'num' – grahamcracker1234