XCode 4 if (self = [super init]) проблема - PullRequest
7 голосов
/ 17 марта 2011

Я недавно (например, только сейчас) обновился до XCode 4, и в целом он мне нравится, однако есть одна вещь, которая меня раздражает.

Когда я пишу такой код:

 if (self = [super init])
 {
      ...
 }

Это дает мне «проблему»: Using the result of an assignment as a condition without parentheses

Как я могу подавить это предупреждение, поскольку оно подчеркивает весь текст красным, заставляя меня думать, что есть критическая ошибка.Поскольку я несколько опытный программист Objective-C, я действительно не хочу менять свои методы и добавлять дополнительные скобки вокруг моих утверждений init.

Ответы [ 8 ]

11 голосов
/ 17 марта 2011

Вы можете поставить дополнительный набор скобок в операторе if

if ((self = [super init])) {
    ...
}

Или вы можете делать то же, что и новые шаблоны.

self = [super init];
if(self) {
    ...
}
3 голосов
/ 19 мая 2011

Вы можете снять флажок «Отсутствующие скобки и скобки» в настройках сборки (в разделе «Предупреждения GCC 4.2», если вы используете GCC4.2 или LLVM GCC4.2).

Это эквивалентно ответу, связанному с aeprius, который работает с LLVM 2.0, но не с GCC 4.2 (протестировано).

Я понимаю, что это предупреждение теперь включено по умолчанию, чтобы избежатьпутаница между назначением и проверкой на равенство.

Как отметил Бавариус здесь , если (self = [super init]) {...} идиоматичен в Objective-C.Предупреждение было отключено по умолчанию. В XCode 3.x может показаться, что перенесенные проекты получают «новое значение по умолчанию» автоматически;жалко получать все эти предупреждения о перенесенных проектах.

По крайней мере, отмена предупреждения не сделает кодирование менее безопасным, чем это было в XCode 3.x.

3 голосов
/ 21 марта 2011

Я нашел ответ на этот вопрос здесь: if (self = [super init]) - Предупреждение LLVM! Как вы справляетесь с этим?

Что предписывает добавить флаг «-Wno-idiomatic-круглые скобки» в настройках здания. Что и помогло мне.

2 голосов
/ 17 марта 2011

Двойные скобки.

if ((self = [super init]))

Это просто проверка того, что вы действительно знаете, что делаете.

IЯ не уверен, есть ли способ заставить замолчать фактическое предупреждение в XC4, так как это не предупреждение компилятора.

1 голос
/ 17 марта 2011

Я обычно так делаю.

self = [super init];

если (сам) {

}

Таким образом, ничто и никто никогда не будет сбит с толку.

1 голос
/ 17 марта 2011

Вы можете либо поставить другой набор паренов вокруг self = [super init], либо можете установить self перед условным, а затем оценивать как будто (self).

1 голос
/ 17 марта 2011

измените его на if ((self = [super init])), это показывает компилятору, что он намеренный.

0 голосов
/ 06 августа 2011

используйте if (self == [self init]) ..... так как вы используете оператор присваивания "=" вместо условия .... оператор if проверяет условие .... n выопределяя значение там ... используйте "==" вместо "=" ...

thanx .....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...