Ios 是否有一个Objective-C等价于IFNULL?
考虑以下代码行中的代码: NSNumber*someNumber=someOtherNumber?someOtherNumber:[NSNumber numberwhithint:0] 基本上,它说如果其他数字不是空的,使用它,否则使用0。我觉得应该有更好的办法。SQL/SQLite有一个名为IFNULL的方便函数,这将使这一点变得更简单。如果它存在,它将使代码看起来像: NSNumber*someNumber=IFNULLsomeOtherNumber,[NSNumber numberwhithint:0]Ios 是否有一个Objective-C等价于IFNULL?,ios,objective-c,Ios,Objective C,考虑以下代码行中的代码: NSNumber*someNumber=someOtherNumber?someOtherNumber:[NSNumber numberwhithint:0] 基本上,它说如果其他数字不是空的,使用它,否则使用0。我觉得应该有更好的办法。SQL/SQLite有一个名为IFNULL的方便函数,这将使这一点变得更简单。如果它存在,它将使代码看起来像: NSNumber*someNumber=IFNULLsomeOtherNumber,[NSNumber numberwhit
objective-c中是否存在类似的内容 Objective-C中提供了三元运算符的GNU扩展 你可以用
NSNumber *someNumber = (someOtherNumber) ?: [NSNumber numberWithInt: 0];
如果someOtherNumber不同于0,则结果将被分配someOtherNumber的值;如果someOtherNumber等于0,则结果将被分配[NSNumber numberWithInt:0]请注意,nil、NULL和nil都是0的形式
为了获得更多乐趣,您可以将[NSNumber numberWithInt:0]表达式缩减为@0。此功能可从开始使用
编辑
更准确地说,LLVM和GCC的现代版本支持这一点,但它不符合。
这就是说,您可以继续使用它,因为您很可能使用现代版本的GCC或LLVM编译它。Objective-C中提供了对三元运算符的GNU扩展
#define IFNULL(compare, value) (compare) ?: (value)
你可以用
NSNumber *someNumber = (someOtherNumber) ?: [NSNumber numberWithInt: 0];
如果someOtherNumber不同于0,则结果将被分配someOtherNumber的值;如果someOtherNumber等于0,则结果将被分配[NSNumber numberWithInt:0]请注意,nil、NULL和nil都是0的形式
为了获得更多乐趣,您可以将[NSNumber numberWithInt:0]表达式缩减为@0。此功能可从开始使用
编辑
更准确地说,LLVM和GCC的现代版本支持这一点,但它不符合。
也就是说,您可以继续使用它,因为您最有可能使用现代版本的GCC或LLVM编译它
#define IFNULL(compare, value) (compare) ?: (value)
应该做到这一点,并且可以像在mysql中一样使用
NSNumber *foo = IFNULL(someNumber, @0);
应该做到这一点,并且可以像在mysql中一样使用
NSNumber *foo = IFNULL(someNumber, @0);
您可以这样定义:
#define IFNULL(someOtherNumber) (someOtherNumber) ? someOtherNumber : [NSNumber numberWithInt:0];
您可以这样定义:
#define IFNULL(someOtherNumber) (someOtherNumber) ? someOtherNumber : [NSNumber numberWithInt:0];
您可以将语法缩短一点:foo?:bar,如果foo为非nil,将计算为foo,否则为bar。您可以将语法缩短一点:foo?:bar,如果foo为非nil,将计算为foo,否则为bar。条件表达式有收缩:
NSNumber *someNumber = someOtherNumber ?: [NSNumber numberWithInt: 0];
使用现代Obj-C,您可以将其进一步简化为:
NSNumber *someNumber = someOtherNumber ?: @0;
条件表达式有一个收缩:
NSNumber *someNumber = someOtherNumber ?: [NSNumber numberWithInt: 0];
使用现代Obj-C,您可以将其进一步简化为:
NSNumber *someNumber = someOtherNumber ?: @0;
值得注意的是,这在C中是不标准的,但由于Objective-C标准基本上是苹果的幸运编译器中的标准,如果你已经在使用Objective-C,这可能不是什么大问题。嘿,如果你用POC编译Objective-C,堆栈溢出上的Objective-C标记中几乎没有任何内容适用于你。是的,注意这是一种修辞^^@GabrielePetronella-正如你提到的ANSI C。。。你用“是”和“否”的描述表达了你对正在发生的事情的看法,但这是。。。if语句和条件表达式都被精确地定义为:如果谓词表达式不等于0`则选择第一个选项,如果谓词表达式不等于0`则选择第二个选项。对于指针类型,等于0的定义为等于null指针常量。这里没有是的,C的快乐-正统剧。大部分时间与Obj-C合作的专业偏见。将我的帖子编辑得更正式。值得注意的是,这在C语言中是不标准的,但由于Objective-C标准基本上是苹果公司的幸运编译器中的标准,如果你已经在使用Objective-C,这可能不是一个大问题。嘿,如果你用POC编译Objective-C,堆栈溢出上的Objective-C标记中几乎没有任何内容适用于您。是的,注意到这是一种修辞^^@GabrielePetronella-正如您提到的ANSI C。。。你用“是”和“否”的描述表达了你对正在发生的事情的看法,但这是。。。if语句和条件表达式都被精确地定义为:如果谓词表达式不等于0`则选择第一个选项,如果谓词表达式不等于0`则选择第二个选项。对于指针类型,等于0的定义为等于null指针常量。这里没有是的,C的快乐-正统剧。大部分时间与Obj-C合作的专业偏见。把我的帖子编辑得更正式。谢谢,这太棒了。确实帮我省了很多击键。谢谢,这太棒了。确实帮我省了很多击键的时间。