2015-10-11 2 views
-1

Я работал над игрой с Swift 1 и Xcode 6, и все отлично работало. Но когда я обновился до XCode 7 и Swift 2, у меня возникла странная проблема. В моей игре у меня было несколько NSTimers, сохраненных в переменных, чтобы вызвать врагов. Примером одной из этих переменных было что-то вроде этого:Проблема инициализации в Swift 2

var firstTimer = NSTimer.scheduledTimerWithTimeInterval(actualTime, target: self, selector: Selector("SpawnEnemy"), userInfo: nil, repeats: true) 

Когда я обновил, каждая переменная этого типа (я был как 4) получил вопрос, который говорит: "Инициализация переменной„firstTimer“никогда не было

Я не могу просто изменить имя каждой переменной на «_», и мне никогда не приходилось ее инициализировать. Что происходит? И почему этого не случилось раньше?

Кстати, я использую эти переменные в коде.

+0

Как вы аннулируете свои таймеры, если вы не храните ссылки на него? Это потенциальная утечка памяти. – Abizern

ответ

3

Ошибка говорит, что вы вообще не использовали значение в своем коде. Если вы собираетесь никогда не остановить таймер, вы можете просто опустить объявление переменной, как это:

NSTimer.scheduledTimerWithTimeInterval(actualTime, target: self, selector: Selector("SpawnEnemy"), userInfo: nil, repeats: true) 

Но если вы хотите, чтобы остановить его позже вы, вероятно, следует сохранить его:

class MyViewController { 
    var timer : NSTimer? 

    func startTimer() { 
     timer = NSTimer.scheduledTimerWithTimeInterval(actualTime, target: self, selector: Selector("SpawnEnemy"), userInfo: nil, repeats: true) 
    } 

    func stopTimer() { 
     timer?.invalidate() 
    } 
} 

Что вы можете сделать:

  • var timer = ... выдает предупреждение, что вы не использовали значение (если вы не сделали) и предупреждение, что timer никогда не изменяла и должна быть let.
  • let timer = ... выдает предупреждение, что вы не использовали значение (если вы не сделали)
  • let _ = ... же, как _ = ... оценивает правую и отбрасывает результат. Нет предупреждений
  • Только ... делает то же самое, что и последний, но может давать предупреждение о функциях с атрибутом @warn_unused_result, когда результат не используется.
+0

1) Я использую его в своем коде – Gabe12

+0

2) Почему этого не произошло до – Gabe12

+2

@ Gabe12 (1) Вы никогда не ссылаетесь на переменную 'firstTimer' в своем коде ... если вы это сделали, предупреждение не появится (2), потому что это новое предупреждение –

Смежные вопросы