如果在快速设置bool时,还有简写崩溃

时间:2016-09-04 19:14:44

标签: ios xcode if-statement swift2 shorthand

我确实有4行代码。

var bool = true

let textField1 = UITextField()

let textField2 = UITextField()

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

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

enter image description here

如果我按照以下方式编写代码

if bool {

   textField1.enabled = false
}
else {

   textfield2.enabled = false
}

如果我按照以下方式写作,那么如果其他方式有效则

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

为什么我的代码失败了?

2 个答案:

答案 0 :(得分:4)

原因是Swift不希望你这样做。因此,它将三元中的第二项视为textField2.enabled,这是一个布尔。但第一个词textField1.enabled = false不是一个布尔;这是一个虚空。

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

正如i_am_jorf所说,你可以通过用括号消除歧义来解决这个问题。

然而,最好不要这样做。你的代码不是很Swifty。您不应该以这种方式使用三元运算符来产生副作用。您应该将其用于每个术语的结果。这更清洁甚至更短:

(bool ? textField1 : textField2).enabled = false

答案 1 :(得分:2)

试试这个:

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

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

  

三元条件运算符根据条件的值评估两个给定值之一。它具有以下形式:

     

条件?如果为true则使用表达式:如果为false则使用表达式

     

如果条件的计算结果为true,则条件运算符将计算第一个表达式并返回其值。否则,它将计算第二个表达式并返回其值。未评估未使用的表达式。

其目的是根据条件分配值,而不是允许流量控制。