我在自定义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*)) {
为什么会这样?
感谢。
答案 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)