使用赋值的结果作为没有括号的条件

时间:2010-12-06 18:02:02

标签: iphone objective-c ios

我在自定义UIActionSheet类中有这个

if (otherButtonTitles != nil) {
    [self addButtonWithTitle:otherButtonTitles];
    va_list args;
    va_start(args, otherButtonTitles);
    NSString * title = nil;
    while(title = va_arg(args,NSString*)) { // error here
        [self addButtonWithTitle:title];
    }
    va_end(args);
}

我有这个错误

!将作业结果用作没有括号的条件

指向这一行

while(title = va_arg(args,NSString*)) {

为什么会这样?

感谢。

4 个答案:

答案 0 :(得分:21)

这可能不是你所说的错误,它是警告

编译器警告您,当它在条件内时,您应该将括号内的赋值括起来,以避免“赋值 - 当你平均比较错误”。

要通过这个相当迂腐的编译器警告,你可以简单地用另一对括号括起来分配:

while((title = va_arg(args,NSString*))) {
//...
}

答案 1 :(得分:7)

应该是警告而不是错误。它正在尝试警告,以防您使用=,但您的意思是==

在这种情况下,您并不意味着使用==,因为您多次调用va_arg()来迭代otherButtonTitles并将其分配给临时变量title ,所以只需添加另一组括号。警告将消失。

while((title = va_arg(args,NSString*))) {

答案 2 :(得分:1)

编译器认为您错误地进行了分配,因此提示此错误。你应该将你的陈述包装成一对括号,如下所示:

while((title = va_arg(args,NSString*)))

然后编译器首先评估赋值,然后该赋值的结果将被传递到while条件

答案 3 :(得分:1)

看起来确实有点挑剔,但你试过了吗?

while((title = va_arg(args,NSString*)) != NULL)