Пытаясь вычесть входные данные UITextField один, но я продолжаю получать ошибку - PullRequest
0 голосов
/ 28 января 2019

Мой код здесь:

@IBAction func updateTime(){
        let inputVal: String = textMinutes.text!
        var inputInt = Int(inputVal)
        timerLabel?.text = "\(inputInt)"
        if  inputInt != 0 {
            inputInt -= 1
        }
        else {
            endTimer()
        }

Так что на inputInt - = 1 я получаю сообщение об ошибке "Не удается преобразовать значение типа 'Int?'к ожидаемому типу аргумента 'inout Int' ".Я не уверен, как это исправить или если мой код даже здесь правильный.Это все для этого:

func startTimer() {

    countdownTimer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(ViewController.updateTime), userInfo: nil, repeats: true)
}

, что для таймера, который я пытаюсь сделать.Я довольно новичок в этом, поэтому, если вам нужно что-то еще увидеть, я могу опубликовать это.Я искал решения, но ничего не нашел.Заранее спасибо.

1 Ответ

0 голосов
/ 28 января 2019

Твоя логика плохая.Вы не хотите менять текст какой-либо метки каждую секунду в соответствии с тем же другим текстом каждый раз.


Вы должны создать глобальную переменную для времени, скажем, interval

class ViewController: UIViewController {
    var interval = 0
    ...
}

, затем, когда вы запускаете таймер, убедитесь, что пользователь записал номер, и если это так, запустите таймер и установите interval

func startTimer() {
    if let interval = Int(textMinutes.text!) {
        self.interval = interval
        timerLabel?.text = String(interval)
        countdownTimer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(ViewController.updateTime), userInfo: nil, repeats: true)
    } else {
        ... // handle case if user didn’t write integer
    }
}

, тогда каждый раз, когда таймер обновляется, просто уменьшите interval и измените textвашего текстового поля с помощью этой interval переменной, затем, когда interval равно 0, сделайте недействительным свой таймер

@IBAction func updateTime() {
    interval -= 1
    timerLabel?.text = String(interval)
    if interval == 0 { endTimer() }
}
...