Тестирование нуля в Objective-C – if (x! = Nil) vs if (x)

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

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

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

 if(x) // ... 

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

В Objective-C значение nil определяется как значение __DARWIN_NULL , которое по существу оценивает значение 0 или false в if-statement. Поэтому запись 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-statement не будет оцениваться. Что-то нужно знать.

И то и другое

 if (x != nil) 

а также

 if ( x ) 

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

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

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

    против

  2. if (something! = nothing) {…}

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

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

 + (NSString *)trimWhiteSpaceAndNewLine:(NSString *)string { NSString *stringSource = [NSString stringWithFormat:@"%@",string]; if ([stringSource isEqualToString:@"(null)"]) { stringSource = @""; return stringSource; } if ([stringSource isEqualToString:@""]) { stringSource = @""; return stringSource; } if ([stringSource isEqualToString:@""]) { 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 } 
  • Реализовать чистый виртуальный метод в Objective-C
  • Как я могу программно получить MAC-адрес iphone
  • Как определить символ препроцессора в Xcode
  • Константы в Objective-C
  • Как добавить знак процента в NSString
  • Interesting Posts

    Данные Spring jpa- Определен бит bean с именем ‘entityManagerFactory’; Инъекция автоуведомленных зависимостей не удалась

    c – преобразовать строку в смешанном случае ко всему нижнему регистру

    Solaris: ssh -tt без вывода

    Компьютер зависает и звучит заикается

    Как я могу оправиться от хард-гена push -f origin master?

    Моя виртуальная машина VirtualBox зависает, когда я пытаюсь использовать веб-камеру

    В Vim есть способ удалить, не помещая текст в регистр?

    Загружать локальный html в WebView?

    Определение размера UILabel?

    Android Сохранение созданного растрового изображения в каталог на SD-карте

    Пароль Windows 7 отклонен после замены материнской платы

    Как получить доступ к моему домашнему ПК из офиса?

    Thread.stop () – устаревший

    android-sdks / build-tools / 17.0.0 / aapt: ошибка при загрузке разделяемых библиотек: libz.so.1: невозможно открыть файл общих объектов: нет такого файла или каталога

    Изменение середины селектора в Sass (добавление / удаление classов и т. Д.)

    Давайте будем гением компьютера.