我实际上有 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")
为什么我的代码失败了?
最佳答案
原因是 Swift 不希望你表现得像这样。因此,它将三进制中的第二项视为 textField2.enabled
,这是一个 bool 值。但是第一个词,textField1.enabled = false
, 不是 bool 值;这是一个虚空。
(这就是您的 print
示例有效的原因;这两个术语都是无效的。)
正如 i_am_jorf 所说,您可以通过使用括号消除歧义来解决此问题。
但是,最好不要这样做。你的代码不是很 Swifty。您不应该以这种方式使用三元运算符来产生副作用。您应该将它用于每个术语的结果。这更干净,甚至更短:
(bool ? textField1 : textField2).enabled = false
关于ios - 如果在 swift 中设置 bool 时速记崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39320571/