三元条件运算符中的赋值产生“表达式不可分配”错误

时间:2013-04-27 18:38:58

标签: objective-c compiler-errors conditional variable-assignment ternary-operator

有人可以告诉我为什么以下是可以的:

if (newEditingMode) {
    dayView.dayViewIsInEditingMode = YES;
}
else{
    dayView.dayViewIsInEditingMode = NO;
}

但是以下错误Expression is not assignable

newEditingMode ? dayView.dayViewIsInEditingMode = YES : dayView.dayViewIsInEditingMode = NO;

2 个答案:

答案 0 :(得分:4)

您可以使用括号,它将进行编译。请尝试以下方法。

newEditingMode ? (dayView.dayViewIsInEditingMode = YES) : (dayView.dayViewIsInEditingMode = NO);

但是,你不应该在三元条件本身内执行赋值;你应该使用它。

dayView.dayViewIsInEditingMode = newEditingMode ? YES : NO;

或者,在这种情况下,您可以完全放弃三元组,因为它是多余的。

dayView.dayViewIsInEditingMode = newEditingMode;

答案 1 :(得分:3)

三元运算符对运算顺序做了很奇怪的事情。这是一个可能有帮助的可行解决方案。

dayView.dayViewIsInEditingMode = (newEditingMode ? YES : NO);

看到你在做什么,你也可以这样写:

dayView.dayViewIsInEditingMode = newEditingMode;