在Objective-C中testingnil if(x!= nil)vs if(x)

我在网上find的大多数例子都写到:

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

这有什么问题吗?

 if(x) // ... 

我尝试了一个简单的程序,并没有发现任何区别。

在Objective-C中, nil被定义为一个名为__DARWIN_NULL的值,在if语句中本质上它的计算结果为0false 。 因此,写if (x == nil)和写if (!x)和写if (x != nil)等于if (x) (因为和false相比,产生一个否定,并且与true条件相同)。


你可以用任何方式编写你的代码,这实际上取决于你认为哪个更具可读性。 我发现if (x)更有意义,但取决于你的风格。

这就像比较if (someCondition == true)if (someCondition)
这一切都取决于你,谁将读取代码。


编辑:由于Yuji正确地提到,由于Objective-C是C的超集,任何评估someCondition 0值的条件都被认为是真实的,因此,如果someCondition的例子中的someCondition值是一个整数值,比如说,-1,将其与true比较会导致false ,并且if语句不会被评估。 有些事情要注意。

 if (x != nil) 

 if ( x ) 

是相同的,所以select你认为使你的代码更易于读取的变体(以及其他读取和支持你的代码的人)

两者是相同的,这是一个风格问题,它归结为是否你喜欢:

  1. 如果(某事){…}

  2. 如果(某事!=无){…}

我总是发现#1更清楚,但是#2被广泛用于文档,因此在这个领域,所以最好是既知道这两种forms,适应一个项目的使用和风格一致。

 if([yourNullObject isKindOfClass:[NSNull class]]){ //if it is null }else{ //if it is not null }