在swift函数中嵌套if语句

时间:2016-12-24 00:29:33

标签: swift if-statement swift3 control-flow

以下功能将红色至绿色倒计时,然后计算用户在显示绿灯后按下按钮的反应时间。

func updateCounter() {

    timerInt -= 1
    if timerInt == 2{
        light.image = UIImage(named: "r.png")
    } else if timerInt == 1 {
        light.image = UIImage(named: "yellow.png")


    } else if timerInt == 0 {

        light.image = UIImage(named: arc4random_uniform(2) == 0 ? "no.png" : "g.png")


        timer.invalidate()
        startStop.isEnabled = true
        scoreTimer = Timer.scheduledTimer(timeInterval: 0.0001, target: self, selector: #selector(ViewController.updateScoreTime), userInfo: nil, repeats: true)

    }
}

如果它指出else if timerInt == 0,则为用户提供随机函数。图像将变为绿色或显示“x”。

如果显示x,我希望用户必须点击指示游戏结束的按钮才能重启红灯序列。

如果显示绿灯,我希望用户必须测试他们的反应时间。

这就是函数现在已经运行的方式,但是如果显示x则它不会改变。我想我希望该函数运行如下:

  

如果timeInt == 0且选择了绿灯   然后运行测试反应时间

     

否则如果timeInt == 0且选择了x   然后结束反应时间并按下按钮

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

我不确定你想要达到的目标,所以我尽了最大努力。试试这个:

func updateCounter() {

    timerInt -= 1
    if timerInt == 2{
        light.image = UIImage(named: "r.png")
    } else if timerInt == 1 {
        light.image = UIImage(named: "yellow.png")
    } else if timerInt == 0 {
        let green = (arc4random_uniform(2) == 0)

        light.image = UIImage(named: (green ? "g.png" : "no.png"))

        if green {
            // run test reaction time
        } else {
            //end reaction time and run game over button
        }

        // NOTE: Do you mean `scoreTimer.invalidate()`?
        timer.invalidate()
        startStop.isEnabled = true
        // NOTE: This time interval seems WAY too small ↓↓↓↓↓↓: it is only a millisecond!
        scoreTimer = Timer.scheduledTimer(timeInterval: 0.0001, target: self, selector: #selector(ViewController.updateScoreTime), userInfo: nil, repeats: true)

    }
}

将前两个注释(也称为以//开头的行)替换为相应的代码,并记下第三和第四条注释。