考虑以下代码行的代码:
NSNumber *someNumber = (someOtherNumber) ? someOtherNumber : [NSNumber numberWithInt: 0];
基本上,它说如果someOtherNumber不是null,请使用它,否则,使用0.我觉得应该有更好的方法来做到这一点.SQL/SQLite有一个方便的函数调用IFNULL,这将使这更简单.如果它存在,它将使代码看起来像:
NSNumber *someNumber = IFNULL(someOtherNumber, [NSNumber numberWithInt: 0]);
在objective-c中是否存在这样的事情?
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进行编译.
条件表达式收缩:
NSNumber *someNumber = someOtherNumber ?: [NSNumber numberWithInt: 0];
Run Code Online (Sandbox Code Playgroud)
使用现代的Obj-C,你可以进一步减少:
NSNumber *someNumber = someOtherNumber ?: @0;
Run Code Online (Sandbox Code Playgroud)