Большинство примеров, которые я нашел в сети, пишут это:
if(x != nil)
// ...
Есть ли проблемы с этим?
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 не будет оцениваться. Что-то нужно знать.
И
if (x != nil)
и
if ( x )
эквивалентны, поэтому выберите вариант, который, по вашему мнению, сделает ваш код более удобочитаемым для вас (и других, кто будет читать и поддерживать ваш код)
Оба одинаковые, и это вопрос стиля, и это сводится к тому, предпочитаете ли вы:
if (something) {...}
против
Я всегда нашел # 1 более понятным, но # 2 широко используется в документации и, следовательно, в поле, поэтому лучше знать обе формы и адаптироваться к тому, что использует проект, и быть стилистически последовательным.
Лучший и безопасный способ проверить нуль
Сделайте общий метод и добавьте все эти значения:
+ (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
}