Тестирование на ноль в Objective-C - if (x! = Nil) против if (x) - PullRequest
70 голосов
/ 30 мая 2011

Большинство примеров, которые я нашел в сети, пишут так:

if(x != nil)
    // ...

Есть ли проблемы с этим?

if(x)
    // ...

Я пробовал как в простой программе, так и не смог 'не нашел никакой разницы.

Ответы [ 5 ]

121 голосов
/ 30 мая 2011

В Objective-C nil определяется как значение, называемое __DARWIN_NULL, которое по существу оценивается как 0 или false в операторах if. Поэтому написание if (x == nil) - это то же самое, что и запись if (!x), а запись if (x != nil) равна if (x) (поскольку сравнение с false создает отрицание, а сравнение с true сохраняет условие неизменным).


Вы можете написать свой код в любом случае, и это действительно зависит от того, что вы считаете более читабельным. Я считаю if (x) более понятным, но это зависит от вашего стиля.

Это как сравнивать if (someCondition == true) с if (someCondition).
Все зависит от вас и от того, кто будет читать код.


Редактировать: Как правильно упоминает Юджи, поскольку Objective-C является надмножеством C, любое условие, которое оценивается как значение, отличное от 0, считается истинным, и поэтому, если someCondition в В приведенном выше примере было получено целое значение, скажем, -1, сравнение с true привело бы к false, и оператор if не был бы оценен. Что-то, о чем нужно знать.

8 голосов
/ 30 мая 2011

Оба

if (x != nil)

и

if ( x )

эквивалентны, поэтому выберите вариант, который, по вашему мнению, сделает ваш код более читабельным для вас (и других, кто будет читать и поддерживать ваш код)

0 голосов
/ 01 августа 2018

Лучший и безопасный способ проверить ноль -
Сделайте общий метод и добавьте все эти null :

+ (NSString *)trimWhiteSpaceAndNewLine:(NSString *)string {
    NSString *stringSource = [NSString stringWithFormat:@"%@",string];
    if ([stringSource isEqualToString:@"(null)"]) {
        stringSource = @"";
        return stringSource;
    }
    if ([stringSource isEqualToString:@"<null>"]) {
        stringSource = @"";
        return stringSource;
    }
    if ([stringSource isEqualToString:@"<nil>"]) {
        stringSource = @"";
        return stringSource;
    }
    if ([stringSource isKindOfClass:[NSNull class]]) {
        stringSource = @"";
        return stringSource;
    }
    if ([stringSource isEqualToString:@""]) {
        stringSource = @"";
        return stringSource;
    }
    if (stringSource == nil) {
        stringSource = @"";
        return stringSource;
    }
    NSString *stringFinal = [stringSource stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    return stringFinal;
}  

И чек

NSString *strUuid = [Common trimWhiteSpaceAndNewLine:[dict valueForKeyPath:@"detail.uuid"]];
        if (![strUuid isEqualToString:@""]) {
            // do your stuff
        }
0 голосов
/ 09 октября 2015
if([yourNullObject isKindOfClass:[NSNull class]]){
    //if it is null
}else{
    //if it is not null
}
0 голосов
/ 28 марта 2015

Оба одинаковы, и это вопрос стиля, и он сводится к тому, предпочитаете ли вы:

  1. если (что-то) {...}

    против

  2. если (что-то! = Ничего) {...}

Я всегда находил # 1 более понятным, но # 2 широко используется в документации и, следовательно, в поле, поэтому лучше как знать обе формы, так и адаптироваться к тому, что использует проект, и быть стилистически последовательными.

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