The*_*eoK 8 ternary-operator ios swift
我有一个双打阵列,以及一个按下按钮清空阵列的按钮.我希望只有当数组的计数大于零时才启用该按钮.代码如下:
var numbers: [Double] = [] //At some point I add some numbers here
numbers.count > 0 ? deleteAllNumbersButton.isEnabled = true : deleteAllNumbersButton.isEnabled = false
Run Code Online (Sandbox Code Playgroud)
编译器抱怨:
'?中的结果值?:'表达式有不匹配的类型'()'和'Bool'
放入if statement它虽然工作得很好.我在这里无法理解这个问题.谁看过这个吗?我使用XCode 8.2.1和Swift 3.
Car*_*ate 24
注意,我不知道Swift,但这似乎不是Swift特有的问题.我无法解释确切的错误,但我可以告诉你如何正确编写它.
三元表达式几乎完全使用,当你需要的东西分配给一个变量或返回一个值,并且有确切 2个选项可供选择.
这就是你想要做的,但你已经用一种令人费解的方式编写它,这可能使编译器感到困惑.
在:
numbers.count > 0 ? deleteAllNumbersButton.isEnabled = true
: deleteAllNumbersButton.isEnabled = false
Run Code Online (Sandbox Code Playgroud)
因为"then"和"else"表达式都包含赋值,所以它们评估(我假设)为Unit(())/"void".我猜这就是为什么它会对你大喊大叫.使用三元组返回单元是没有意义的(实际上,如注释中所述,运算符优先级是错误的真正原因).
你的意思是:
deleteAllNumbersButton.isEnabled = numbers.count > 0 ? true : false
Run Code Online (Sandbox Code Playgroud)
请注意,不是在三元组中分配,而是分配三元组的结果.在无法进一步简化的情况下(见下文),这应该是如何使用三元组的.
这个新表格应该会引发危险信号.为什么要指定true/false?这几乎总是代码味道.鉴于条件已经计算为布尔值,这是多余的.
只需将其减少为:
deleteAllNumbersButton.isEnabled = numbers.count > 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6914 次 |
| 最近记录: |