"如果"声明,条件永远不会被执行

时间:2017-08-27 07:45:15

标签: swift if-statement 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
    }
}

2 个答案:

答案 0 :(得分: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
    }
}

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

答案 1 :(得分:-2)

完整解决方案:

make