Большинство примеров, которые я нашел в сети, пишут это:
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
}