我有一个IF声明,我需要它在分数> = 200时触发,但只发生一次而不是重复发生。
这是我的代码:
if score >= 200 {
meteRedTimer.invalidate()
meteBlueTimer = Timer.scheduledTimer(timeInterval: 0.7, target: self, selector: #selector(self.makeBlueMete), userInfo: nil, repeats: true)
} else {
}
然而,当得分为=>时,这会不断地启动计时器。 200而不仅仅是我理解的一个计时器。
如果我得分= 200,那么这将有效,但是根据比赛的情况,分数有可能从190跳到210。
一旦触发一次,我怎么能基本上停止这个IF语句?
答案 0 :(得分:1)
创建var didPermored = false
并在if语句
if score >= 200 && !didPermormed {
didPermormed = true
meteRedTimer.invalidate()
meteBlueTimer = Timer.scheduledTimer(timeInterval: 0.7, target: self, selector: #selector(self.makeBlueMete), userInfo: nil, repeats: true)
} else {
//do stuff
}
答案 1 :(得分:1)
确保meteBlueTimer
被声明为可选。
var meteBlueTimer: Timer?
然后只需检查它是否为零。
if score >= 200 {
if meteBlueTimer == nil {
meteRedTimer.invalidate()
meteBlueTimer = Timer.scheduledTimer(timeInterval: 0.7, target: self, selector: #selector(self.makeBlueMete), userInfo: nil, repeats: true)
}
} else {
}
这样您只需创建一次meteBlueTimer
。
答案 2 :(得分:1)
将您的计时器声明为可选
var meteBlueTimer : Timer?
var meteRedTimer : Timer?
然后检查计时器是否未运行(nil
)。将无效的计时器设置为nil
。
if score >= 200 && meteBlueTimer == nil {
meteRedTimer?.invalidate()
meteRedTimer = nil
meteBlueTimer = Timer.scheduledTimer(timeInterval: 0.7, target: self, selector: #selector(self.makeBlueMete), userInfo: nil, repeats: true)
} else { ...