我有一个简单的函数返回NSNumber
s的原始总和,但如果它们是-1,则不计算它们:
- (NSInteger)total {
return [[self obj1] integerValue] == -1 ? 0 : [[self obj1] integerValue] +
[[self obj2] integerValue] == -1 ? 0 : [[self obj2] integerValue] +
[[self obj3] integerValue] == -1 ? 0 : [[self obj3] integerValue];
}
在这种情况下,total
将始终返回0.
但如果我这样写:
- (NSInteger)total {
NSInteger ret = 0;
ret += [[self obj1] integerValue] == -1 ? 0 : [[self obj1] integerValue];
ret += [[self obj2] integerValue] == -1 ? 0 : [[self obj2] integerValue];
ret += [[self obj3] integerValue] == -1 ? 0 : [[self obj3] integerValue];
return ret;
}
total
将返回正确的值。
我没有偏好以一种方式写它,但我没有看到第一种方式有什么问题。
答案 0 :(得分:4)
运营商优先权。三元运算符在C中具有第三低的优先级,因此在可以到达条件部分之前评估加法。使用括号:
return ([[self obj1] integerValue] == -1 ? 0 : [[self obj1] integerValue]) +
([[self obj2] integerValue] == -1 ? 0 : [[self obj2] integerValue]) +
([[self obj3] integerValue] == -1 ? 0 : [[self obj3] integerValue]);