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

kiz*_*zx2 71 syntax objective-c

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

if(x != nil)
    // ...
Run Code Online (Sandbox Code Playgroud)

这有什么问题吗?

if(x)
    // ...
Run Code Online (Sandbox Code Playgroud)

我在一个简单的程序中尝试了两个,但没有找到任何区别.

Ita*_*ber 124

在Objective-C中,nil被定义为一个被调用的值__DARWIN_NULL,它实质上是在if语句中0false在if语句中.因此,写作 if (x == nil)与写作if (!x)和写作if (x != nil)相同if (x)(因为比较false创建否定,并比较以true保持条件相同).


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

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


编辑:正如Yuji正确提到的那样,由于Objective-C是C的超集,因此任何求值为0以外的值的条件都被认为是真的,因此,如果someCondition在上面的例子中要求求整数值,比方说,-1,比较它true会导致false,并且不会评估if语句.需要注意的事情.

  • 我应该补充说,不鼓励`if(someCondition == true)`,因为在C派生语言中,0以外的任何值原则上都可以视为布尔值,但是由于历史原因,如果`someCondition`是` -1`和`true`定义为`1`然后`someCondition == true`计算结果为false. (12认同)

Vla*_*mir 8

if (x != nil)
Run Code Online (Sandbox Code Playgroud)

if ( x )
Run Code Online (Sandbox Code Playgroud)

是等价的,所以选择你认为使你的代码更易读的变体(以及其他将阅读和支持你的代码的人)