if else shorthand 在 swift 中设置 bool 时崩溃

if else shorthand crashes on setting bool in swift

我确实有 4 行代码。

var bool = true

let textField1 = UITextField()

let textField2 = UITextField()

bool ? textField1.enabled = false : textField2.enabled = false

以上代码失败并出现以下错误。

如果我按照下面的方式编写代码工作

if bool {

   textField1.enabled = false
}
else {

   textfield2.enabled = false
}

如果我这样写,那么 if else 的简写就可以了

bool ? print("It's True") : print("It's False")

为什么我的代码失败了?

试试这个:

bool ? (textField1.enabled = false) : (textField2.enabled = false)

请注意,三元运算符不是“if-else shorthand”。它被定义为:

The ternary conditional operator evaluates to one of two given values based on the value of a condition. It has the following form:

condition ? expression used if true : expression used if false

If the condition evaluates to true, the conditional operator evaluates the first expression and returns its value. Otherwise, it evaluates the second expression and returns its value. The unused expression is not evaluated.

目的是根据条件赋值,不允许流量控制。

原因是Swift没想到你会这样。因此,它将三元组中的第二项视为 textField2.enabled,这是一个 Bool。但是第一项 textField1.enabled = false 而不是 Bool;这是一个虚空。

(这就是您的 print 示例有效的原因;两个 术语都是空的。)

正如 i_am_jorf 所说,您可以通过使用括号消除歧义来解决此问题。

但是,最好不要这样做。您的代码不是很 Swifty。您不应该以这种方式使用三元运算符来产生副作用。您应该将其用于每个条款的 result。这更简洁,甚至更短:

(bool ? textField1 : textField2).enabled = false