Objective-C是否与IFNULL相当?

Mik*_*ike 1 objective-c ios

考虑以下代码行的代码:

NSNumber *someNumber = (someOtherNumber) ? someOtherNumber : [NSNumber numberWithInt: 0];

基本上,它说如果someOtherNumber不是null,请使用它,否则,使用0.我觉得应该有更好的方法来做到这一点.SQL/SQLite有一个方便的函数调用IFNULL,这将使这更简单.如果它存在,它将使代码看起来像:

NSNumber *someNumber = IFNULL(someOtherNumber, [NSNumber numberWithInt: 0]);

在objective-c中是否存在这样的事情?

Gab*_*lla 5

Objective-C中有三元运算符的GNU扩展.

您可以使用

NSNumber *someNumber = (someOtherNumber) ?: [NSNumber numberWithInt: 0];
Run Code Online (Sandbox Code Playgroud)

结果将被分配的值someOtherNumber,如果它比不同0[NSNumber numberWithInt: 0]如果someOtherNumber等于0(注意nil,NULL并且Nil是所有形式的0).

为了获得额外的快乐,你可以减少你的[NSNumber numberWithInt:0]表达@0.此功能可从LLVM 3.3开始使用.

编辑

更准确地说,现代版本的LLVM和GCC支持这一点,但它符合ANSI C规范.也就是说,您可以继续使用它,因为您最有可能使用现代版本的GCC或LLVM进行编译.


CRD*_*CRD 5

条件表达式收缩:

NSNumber *someNumber = someOtherNumber ?: [NSNumber numberWithInt: 0];
Run Code Online (Sandbox Code Playgroud)

使用现代的Obj-C,你可以进一步减少:

NSNumber *someNumber = someOtherNumber ?: @0;
Run Code Online (Sandbox Code Playgroud)