【问题标题】:Swift If else statement not working as intendedSwift If else 语句未按预期工作
【发布时间】:2016-12-12 02:44:52
【问题描述】:

我尝试为类似于高/低游戏的游戏制作 if else 语句。当您单击该按钮时,该语句似乎跳过了 if NewNumber <= oldNumber 部分并直接进入 else 部分。它应该检查新的整数和旧的整数,看看它是更高还是更低。 只做了一小会儿,所以我不确定我做错了什么

//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)"
}

【问题讨论】:

  • 做过任何基本的调试,比如检查newNumberoldNumber的值是什么?
  • 在方法中打一个断点,然后打印出newNumber和oldNumber的值。如果它转到 else 语句,则意味着 newNumber 大于 old number
  • 你显示的代码没有在任何地方设置 oldNumber 的值,所以要么你缺少一些代码,要么就是你的问题。
  • 这看起来像是从接受的答案stackoverflow.com/a/38769978/1187415 到您上一个问题的代码。如果这不起作用,那么您应该询问答案的作者以进行澄清。

标签: swift integer comparison optional


【解决方案1】:

您正在将 Int 值与 nil 类型的 Int? 值进行比较

var newNumber = 10
var oldNumber: Int?

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

结果

Not <=

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

建议

lowerNumber 是一个很奇怪的方法:

  1. 不需要参数
  2. 它返回最小值
  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)
}

【讨论】:

  • 顺便说一句,用于可选的&lt;&gt; 运算符将在Swift 3 中被删除。这个问题就是原因:)
  • @Sulthan:我不知道,我同意,这是件好事 :) 感谢分享。
猜你喜欢
  • 2020-11-28
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-26
  • 2022-11-20
  • 1970-01-01
相关资源
最近更新 更多