NSTimer Countdown - updateCounter Swift 3.0 Новый синтаксис?

У меня есть простой таймер обратного отсчета. И ярлык, который отображает обратный отсчет.

var swiftTimer = NSTimer()
var swiftCounter = 60

override func viewDidLoad() {

timerLabel.text = String(swiftCounter)

}

Я уменьшаю счетчик на одну секунду. Эта функция выдает мне ошибку:

func updateCounter() {
    timerLabel.text = String(swiftCounter--)

Эрро заявляет:

'--' устарел: он будет удален в Swift 3

Я понимаю, что мне нужно преобразовать -- в x -= 1 (x — это переменная). я пытался

 func updateCounter() {
        timerLabel.text = String(swiftCounter -= 1)

    }

чтобы уменьшить счетчик на 1 секунду, но мой счетчик (timerLabel) просто становится пустым.

Каков новый синтаксис Swift для моей ситуации, пожалуйста?

* ОБНОВЛЕНИЕ: *

Я также добавил условие, что мой таймер останавливается, когда он достигает нуля (0), я не смог сделать это раньше, и мой таймер ушел в отрицательную зону. Мой измененный код выглядит следующим образом:

func updateCounter() {
    swiftCounter -= 1
    timerLabel.text = String(swiftCounter)

    if swiftCounter == 0 {
        swiftTimer.invalidate()
    }
}

Надеюсь, это поможет кому-то с похожей ситуацией;)


person Katherine Jenkins    schedule 25.04.2016    source источник
comment
Совет: по соглашению имена переменных начинаются со строчной буквы (это позволяет легко отличить их от классов), т. е. swiftCounter вместо SwiftCounter.   -  person EmilioPelaez    schedule 25.04.2016
comment
да. совершенно верно. изменил мою переменную. ты   -  person Katherine Jenkins    schedule 25.04.2016


Ответы (3)


Вы должны разделить логику на 2 строки, потому что вы уменьшаете и сохраняете, а затем конвертируете в строку для отображения, и это две разные вещи:

SwiftCounter -= 1
timerLabel.text = String(SwiftCounter)
person Wain    schedule 25.04.2016
comment
Уменьшение необходимо выполнить после того, как текст будет иметь тот же эффект, что и текущий код. - person dan; 25.04.2016

Во-первых, это предупреждение, а не ошибка.

Просто вставьте дополнительную строку.

func updateCounter() {
   SwiftCounter -= 1
   timerLabel.text = String(SwiftCounter)
person vadian    schedule 25.04.2016
comment
да. Предупреждение. Спасибо. Ваше решение работает. На самом деле у меня был func updateCounter() { SwiftCounter -= 1 timerLabel.text = "\(SwiftCounter)" }, который тоже работает, но ваше решение выглядит чище. - person Katherine Jenkins; 25.04.2016
comment
Почему бы просто не String(SwiftCounter - 1) - person appiconhero.co; 25.04.2016
comment
каждый раз, когда таймер срабатывает, он всегда будет иметь один и тот же результат @ khuong291, вам нужно где-то уменьшить SwiftCounter ... - person Wain; 25.04.2016
comment
Проголосовал, другое решение появилось немного раньше. - person Katherine Jenkins; 25.04.2016

Я редактирую вашу функцию:

 func updateCounter() {
    SwiftCounter -= 1
    timerLabel.text = String(SwiftCounter)
 }
person Oleg Gordiichuk    schedule 25.04.2016
comment
Проголосовал, другое решение появилось немного раньше. - person Katherine Jenkins; 25.04.2016