"if"语句,条件永远不会被执行

Dev*_*ode -3 if-statement swift swift3

我认为我对if语句很好,但显然我仍然缺少某些东西.在timer.invalidate()编译器抱怨的行中

永远不会被执行

据我所知,我的语法是正确的.

@IBAction func button(_ sender: Any) {

    let timer = Timer.scheduledTimer(timeInterval:0.2 , target: self, selector: #selector(ViewController.imageSwitch) , userInfo: nil, repeats: true)

    var buttonState = false

    if buttonState == true {
        timer.invalidate()
        buttonState = false
    }
    if buttonState == false {
        timer.fire()
        buttonState = true
    }
}
Run Code Online (Sandbox Code Playgroud)

luk*_*302 5

你必须移出方法的声明buttonState.然后简化if条件:

var buttonState = false

 @IBAction func button(_ sender: Any) {
    let timer = Timer.scheduledTimer(timeInterval:0.2 , target: self, selector: #selector(ViewController.imageSwitch) , userInfo: nil, repeats: true)

    if buttonState {
        timer.invalidate()
        buttonState = false
    } else {
        timer.fire()
        buttonState = true
    }
}
Run Code Online (Sandbox Code Playgroud)

你还应该问问自己这些方法甚至应该做什么,你是否希望buttonState不断切换truefalse后退,或者你是否希望它做其他事情(比如在延迟后切换到另一个值)?在第一种情况下,你应该在方法之外声明计时器并让它在那里运行,永远不会使它失效 - 在第二种情况下,你应该在else块内移动计时器声明并repeat关闭.在这两种情况下,您应该删除timer.invalidate()timer.fire()调用.