Тестирование на ноль в Objective-C-if(x!= nil) vs if(x)
большинство примеров, которые я нашел в сети пиши так:
if(x != nil)
// ...
есть ли проблемы с этим?
if(x)
// ...
я попробовал оба в простой программе и не смог найти никакой разницы.
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 широко используется в документации и, следовательно, в этой области, поэтому лучше знать обе формы и адаптироваться к тому, что использует проект, и быть стилистически последовательным.
лучший и безопасный способ проверить ноль-это
Сделайте общий метод и добавьте все эти 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 }