2017-02-03 12 views
0

Я использую класс Timer для выполнения определенного кода каждые x секунд. Когда что-то происходит в этом коде, я хочу аннулировать таймер, тем самым останавливая «цикл».Как отключить таймер без заданной переменной

мне удалось это сделать, выполнив следующие действия:

let timer = Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block: { timer in 

    //when something happens 
    timer.invalidate() 

}) 

Однако, я не использую этот таймер нигде в моем коде, так Xcode дает мне предупреждение:

Инициализация таймера неизменяемого значения никогда не использовалась; рассмотрите замену с присвоением на '_' или удалите ее

Очевидно, что это не останавливает мое приложение, но я хотел бы избавиться от предупреждения.

Я знаю, что только с помощью:

Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block: { timer in 
    //do stuff 
}) 

все еще будет работать, но тогда я не знаю, как аннулирует таймер. Просто позвонить invalidate() внутри закрытия не работает (длинный выстрел я знаю, но я все равно попробовал).

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

Я огляделся, думая, что это будет довольно распространенная проблема, но я не нашел ничего полезного. Может ли кто-нибудь пролить свет на то, как я могу эффективно аннулировать таймер без установки переменной?

ответ

4

Вам необходимо позвонить по телефону timer.invalidate(), но здесь timer является ссылкой на блок Timer.

Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block: 
{ 
    timer in //This is object that you need to use 

    //do stuff 

    //when something happens 
    timer.invalidate() 
}) 
+0

Ах, да, я забыл о блоке var. Теперь я понимаю, почему это необходимо;) –

+1

Я приму этот ответ, через десять минут, как только это позволит мне –

+0

@BenjaminLowry Приветствуем друга :) –

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

  • Нет связанных вопросов^_^