切换Bool值时不执行三元操作

时间:2015-02-17 19:04:04

标签: xcode swift

我有一个非常简单的代码行,我在切换Bool值。如果是,则将其设为false,如果为false,则将其设为true。

if x == true { x = false } else { x = true }

我认为这对Swift的三元运算符很有用,所以我试过了:

x = true ? false : true

Xcode在结尾处标记true并声明"永远不会执行。"当我执行代码时,如果x为true,则切换为false,但如果为false,则不会切换为true,就像Xcode所说的那样。

在研究这个问题时,我已经意识到切换我的Bool的正确方法就是这样写:

x = !x

我仍然想知道我做错了什么。我对三元运算符的理解不清楚?

1 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为您的条件总是true,而不是x变量的当前true / false状态。

x = true ? false : true

    ^^^^

如上所述,此代码将始终将false分配给x,因为条件不会失败。当写为普通if语句时,您尝试使用的代码将如下所示

if true {
    x = false
} else {
    x = true
}

这使得更容易理解为什么永远不会输入else子句。相反,您应该使用以下内容。

x = x ? false : true // x = x == true ? false : true

如果x为真,则将x指定为false,如果x为假,则将x指定为true。