我有一行非常简单的代码,我在其中切换一个 Bool 值。如果它是真的就让它成为假,如果它是假的就让它成为真的。
if x == true { x = false } else { x = true }
我认为这对 Swift 的三元运算符来说是一个很好的用途,所以我尝试了:
x = true ? false : true
Xcode 在末尾标记 true 并声明“永远不会执行”。当我执行代码时,如果 x 为真,它会切换为假,但如果为假,它不会切换为真,就像 Xcode 声明的那样。
在研究这个问题时,我意识到切换 Bool 的正确方法是这样写:
x = !x
我仍然想知道我做错了什么。我对三元运算符有什么不了解的地方?
请您参考如下方法:
发生这种情况是因为您的条件始终为 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 赋值为假,如果 x 为假则将 x 赋值为真。
