“如果”声明,条件将永远不会被执行
问题描述:
我认为我很好与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
}
}
答
您必须将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()
调用。
答
完整的解决方案:
var timerState = false
var timer = Timer()
@IBAction func button(_ sender: Any) {
if timerState == false {
timer.invalidate()
timer = Timer.scheduledTimer(timeInterval:0.2 , target: self, selector: #selector(ViewController.imageSwitch) , userInfo: nil, repeats: true)
timerState = true
} else {
timer.invalidate()
timerState = false
你到底想干什么?你将'buttonState'设置为false,然后检查它是否为true。当然这不会是真的。 – Sweeper
删除这行'var buttonState = false'并将其添加到方法'@IBAction func按钮(_ sender:Any)'之外。 – Amit
您需要将var buttonState = false全局设置为视图控制器,否则此条件从不为真。 – Hitesh