'? 中的结果值:' 表达式具有不匹配的类型 '()' 和 'Bool'
Result values in '? :' expression have mismatching types '()' and 'Bool'
我有一个双打数组和一个按钮,按下该按钮会清空数组。我希望仅当数组的计数大于零时才启用按钮。代码如下:
var numbers: [Double] = [] //At some point I add some numbers here
numbers.count > 0 ? deleteAllNumbersButton.isEnabled = true : deleteAllNumbersButton.isEnabled = false
编译器抱怨:
Result values in '? :' expression have mismatching types '()' and
'Bool'
当放入 if statement
时,它工作得很好。我无法理解这里的问题。谁看过这个吗?我使用 XCode 8.2.1 和 Swift 3.
请注意,我不知道 Swift,但这似乎不是 Swift 的特定问题。我无法解释确切的错误,但我可以告诉您如何正确编写它。
条件表达式几乎只用在需要给变量赋值或return值时,并且有正好 2个选项可供选择。
这就是您想要做的,但是您以一种可能会使编译器感到困惑的复杂方式编写它。
表达式中:
numbers.count > 0 ? deleteAllNumbersButton.isEnabled = true
: deleteAllNumbersButton.isEnabled = false
因为“then”和“else”表达式都包含赋值,它们的计算结果(我假设)是一个单位 (()
)/“void”。我猜这就是它对你大喊大叫的原因。将三元数用于 return 一个 Unit 是没有意义的(实际上,如评论中所述,运算符优先级是错误的真正原因)。
您的意思可能是:
deleteAllNumbersButton.isEnabled = numbers.count > 0 ? true : false
注意如何不在条件表达式中赋值,而是赋值表达式的结果。在无法进一步简化的情况下(见下文),这就是应该使用条件表达式的方式。
不过,这种新形式应该引起注意。为什么条件表达式的计算结果为 true/false?这几乎总是一种代码味道。考虑到条件已经评估为布尔值,这是多余的。
只需将其减少到:
deleteAllNumbersButton.isEnabled = numbers.count > 0
我有一个双打数组和一个按钮,按下该按钮会清空数组。我希望仅当数组的计数大于零时才启用按钮。代码如下:
var numbers: [Double] = [] //At some point I add some numbers here
numbers.count > 0 ? deleteAllNumbersButton.isEnabled = true : deleteAllNumbersButton.isEnabled = false
编译器抱怨:
Result values in '? :' expression have mismatching types '()' and 'Bool'
当放入 if statement
时,它工作得很好。我无法理解这里的问题。谁看过这个吗?我使用 XCode 8.2.1 和 Swift 3.
请注意,我不知道 Swift,但这似乎不是 Swift 的特定问题。我无法解释确切的错误,但我可以告诉您如何正确编写它。
条件表达式几乎只用在需要给变量赋值或return值时,并且有正好 2个选项可供选择。
这就是您想要做的,但是您以一种可能会使编译器感到困惑的复杂方式编写它。
表达式中:
numbers.count > 0 ? deleteAllNumbersButton.isEnabled = true
: deleteAllNumbersButton.isEnabled = false
因为“then”和“else”表达式都包含赋值,它们的计算结果(我假设)是一个单位 (()
)/“void”。我猜这就是它对你大喊大叫的原因。将三元数用于 return 一个 Unit 是没有意义的(实际上,如评论中所述,运算符优先级是错误的真正原因)。
您的意思可能是:
deleteAllNumbersButton.isEnabled = numbers.count > 0 ? true : false
注意如何不在条件表达式中赋值,而是赋值表达式的结果。在无法进一步简化的情况下(见下文),这就是应该使用条件表达式的方式。
不过,这种新形式应该引起注意。为什么条件表达式的计算结果为 true/false?这几乎总是一种代码味道。考虑到条件已经评估为布尔值,这是多余的。
只需将其减少到:
deleteAllNumbersButton.isEnabled = numbers.count > 0