Swift If else 语句未按预期工作

Swift If else statement not working as intended

我尝试为类似于 high/low 游戏的游戏制作 if else 语句。当您单击该按钮时,该语句似乎跳过了 if NewNumber <= oldNumber 部分,直接进入了其他部分。它应该将新整数与旧整数进行比较,看看它是更高还是更低。 只做了 swift 一段时间所以我不确定我做错了什么

//Lower Button
@IBAction func lowerButton(sender: AnyObject) {
    var newNumber = randomIntBetween(2, high: 26)
    var oldNumber: Int?

    func lowerNumber() -> Int {
        if newNumber <= oldNumber {
            correctWrongLabel.text = "You Were Correct!"
            scoreLabel.text = "Score: \(countWin++)"
        } else {
            correctWrongLabel.text = "You Were Wrong!"
            scoreLabel.text = "Score: \(countLose)"
        }
        return newNumber
    }

    let newValue = lowerNumber()
    randomIntLabel.text = "\(newValue)"
}

您正在将 Int 值与类型为 Int?

nil 值进行比较
var newNumber = 10
var oldNumber: Int?

if newNumber <= oldNumber {
    print("<=")
} else {
    print("Not <=")
}

结果

Not <=

在 Swift 中 Int 不是 <= 而是 nil,这就是执行 else 分支的原因。

建议

lowerNumber 是一个很奇怪的方法:

  1. 它不需要参数
  2. 它returns最小值
  3. 它还执行一些操作

我建议你改成这样

func updateUI(old: Int, new: Int) {
    if new <= old {
        correctWrongLabel.text = "You Were Correct!"
        scoreLabel.text = "Score: \(countWin++)"
    } else {
        correctWrongLabel.text = "You Were Wrong!"
        scoreLabel.text = "Score: \(countLose)"
    }
}

然后当在你的代码中你需要得到你的 2 个值之间的最小值时,只需使用 min

if let oldNumer = oldNumber {
    let minimum = min(newNumber, oldNumber)
}