我在网上发现的大部分例子都写道:
if(x != nil)
// ...
这有什么问题吗?
if(x)
// ...
我在一个简单的程序中尝试了两个,但没有发现任何差异。
答案 0 :(得分:121)
在Objective-C中,nil
被定义为一个名为__DARWIN_NULL
的值,它基本上在if语句中求值为0
或false
。因此,写作
if (x == nil)
与撰写if (!x)
相同,写if (x != nil)
等于if (x)
(因为与false
比较会产生否定,并与{{1}进行比较保持条件相同)。
您可以用任何一种方式编写代码,这实际上取决于您认为哪些代码更具可读性。我发现true
更有意义,但这取决于你的风格。
这就像比较if (x)
与if (someCondition == true)
这一切都取决于你,谁将会阅读代码。
编辑:正如Yuji正确提到的那样,由于Objective-C是C的超集,因此任何计算为0以外的值的条件都被认为是真的,因此,如果{{1在上面的示例中,要计算为-1的整数值,将其与if (someCondition)
进行比较会导致someCondition
,并且不会计算if语句。需要注意的事情。
答案 1 :(得分:8)
两个
if (x != nil)
和
if ( x )
是等效的,因此请选择您认为使您的代码更强可读的变体(以及其他将阅读和支持您的代码的人)
答案 2 :(得分:0)
两者都是一样的,这是一个风格问题,归结为你是否愿意:
if(something){...}
与
我总是发现#1更清晰,但#2广泛用于文档和字段中,因此最好既知道两种形式又适应项目使用的内容并保持风格一致。
答案 3 :(得分:0)
检查nil的最佳和安全方法是
设置一个通用方法,并添加所有这些 null :
A B C
0 X Foo X
1
2 X Foo X
然后检查
+ (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;
}
答案 4 :(得分:-3)
if([yourNullObject isKindOfClass:[NSNull class]]){
//if it is null
}else{
//if it is not null
}