Skip to main content
 首页 » 操作系统

xcode之切换 Bool 值时不执行三元运算

2024年01月01日35kerrycode

我有一行非常简单的代码,我在其中切换一个 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 赋值为真。