Swift IF语句只执行一次动作

时间:2017-03-29 20:54:19

标签: swift if-statement timer

我有一个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语句?

3 个答案:

答案 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 { ...