Objective-C是否使用短路评估?

kwc*_*cto 18 objective-c short-circuiting

我尝试过以下方面:

if(myString != nil && myString.length) { ... }
Run Code Online (Sandbox Code Playgroud)

得到了:

- [NSNull length]:发送到实例的无法识别的选择器

在第一个条件失败后,Objective-C不会短路吗?

Geo*_*lly 30

Objective-C确实支持短路评估,就像C一样.

似乎在你的例子中myStringNSNull和否nil,因此myString != nil是真的.

NSNull是一个单例,用于表示nil仅允许对象的位置,例如在NSArray中.

顺便说一句,通常,人们会写if (!myString && myString.length == 0).比较nil相当难看.另外,我将长度与0进行比较.这似乎更清楚.

  • 我不会说人们"通常"不会与零比较.我已经看到它以相同的频率完成两种方式.这个论点是你可以把它读作'如果myString不是nil'而不是'if not myString'. (7认同)
  • 从技术上讲,你可以直接执行`if(myString.length){...}`并保留它,因为如果myString是一个nil对象而你向它发送一条长度消息,那么无论如何你都会得到nil. (2认同)

Ste*_*non 10

Objective-C是C的严格超集.

因为C支持短路评估,所以Objective-C也可以.