Использование результата задания как условие без круглых скобок

У меня это внутри пользовательского класса 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*)) {

почему?

спасибо.

Ответ 1

Это, вероятно, не ошибка, как вы сказали, это предупреждение.

Компилятор предупреждает вас, что вы должны окружать назначения в круглых скобках, когда он находится в пределах условного условия, чтобы избежать ошибки ol < присваивания-когда-вы-среднего сравнения.

Чтобы пройти мимо этого довольно педантичного предупреждения компилятора, вы можете просто окружить назначение в другой паре круглых скобок:

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

Ответ 2

Это должно быть предупреждение, а не ошибка. Он пытается предупредить, если вы используете =, но вы имели в виду ==.

В этом случае вы не имеете в виду использовать ==, потому что вы вызываете va_arg() несколько раз, чтобы выполнить итерацию через otherButtonTitles и назначив его temp var title, поэтому просто добавьте еще один набор круглые скобки. Предупреждение исчезнет.

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

Ответ 3

Компилятор

считает, что вы выполняете присвоение по ошибке, следовательно, предлагая эту ошибку. Вы должны обернуть свое утверждение в ONE MORE PAIR круглых скобок следующим образом:

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

Затем компилятор сначала оценит назначение, тогда результат этого присваивания будет передан в условие while

Ответ 4

Это кажется немного придирчивым, но вы пробовали:

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

?