我确实有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
}
如果我按照以下方式写作,那么如果其他方式有效则
bool ? print("It's True") : print("It's False")
为什么我的代码失败了?
答案 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,则条件运算符将计算第一个表达式并返回其值。否则,它将计算第二个表达式并返回其值。未评估未使用的表达式。
其目的是根据条件分配值,而不是允许流量控制。