我认为我对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
}
}
答案 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