Тестирование на ноль в Objective-C-if(x!= nil) vs if(x)


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

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

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

if(x)
    // ...

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

5 67

5 ответов:

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


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

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


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

и

if (x != nil)

и

if ( x )

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

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

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

    и

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

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

лучший и безопасный способ проверить ноль-это
Сделайте общий метод и добавьте все эти 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
        }
if([yourNullObject isKindOfClass:[NSNull class]]){
    //if it is null
}else{
    //if it is not null
}