Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 是否有一个Objective-C等价于IFNULL?_Ios_Objective C - Fatal编程技术网

Ios 是否有一个Objective-C等价于IFNULL?

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

考虑以下代码行中的代码:

NSNumber*someNumber=someOtherNumber?someOtherNumber:[NSNumber numberwhithint:0]

基本上,它说如果其他数字不是空的,使用它,否则使用0。我觉得应该有更好的办法。SQL/SQLite有一个名为IFNULL的方便函数,这将使这一点变得更简单。如果它存在,它将使代码看起来像:

NSNumber*someNumber=IFNULLsomeOtherNumber,[NSNumber numberwhithint:0]


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合作的专业偏见。把我的帖子编辑得更正式。谢谢,这太棒了。确实帮我省了很多击键。谢谢,这太棒了。确实帮我省了很多击键的时间。