尝试将UITextField的输入减一,但我不断收到错误消息

时间:2019-01-27 22:21:59

标签: swift countdowntimer

我的代码在这里:

@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 :(得分:0)

您的逻辑不好。您不想每次都根据相同的其他文本每秒更改某个标签的文本。


您应该为时间创建全局变量,例如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时,使计时器无效< / p>

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