我有一个非常简单的代码行,我在切换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
我仍然想知道我做错了什么。我对三元运算符的理解不清楚?
答案 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。