什么是?:运算符

在Objective-C代码的示例中,我找到了这个运算符

self.itemViews[@(0)] ?: [self.dataSource slidingViewStack:self viewForItemAtIndex:0 reusingView:[self dequeueItemView]]; 

该代码在Apple LLVM 4.2下编译。

我遇到的唯一一件事就是成为一个向量运算符,但我不认为Objective-C,就C而言,它有向量运算符。 那么有人可以提供此运营商的参考和/或文档。

?:是C 条件运算符

 a ? b : c 

如果a不等于0则产生b值,如果a等于0a c

GNU扩展( 带有省略操作数的条件 )允许在没有第二个操作数的情况下使用它:

  x ? : y 

相当于

  x ? x : y 

你熟悉三元运算符吗? 通常在风格中看到:

 test ? result_a : result_b; 

这里发生的一切都是没有给出第一个分支,所以在正面情况下不会发生任何事情。 类似于以下内容:

 test ?: result_b; 

由于评估C的方式,如果测试是不合理的,这将返回result_b,否则它将返回test

在您给出的示例中 – 如果缺少视图,则会回退到检查数据源以提供替换值。

它是三元运算符 ,因为Objective-C是C的超集,您可以使用此运算符。

一些关于此的教程 。

a = x? :y;

表达式相当于

a = x? x:y;

它是 ? 运算符,称为三元运算符,以这种方式使用:

 condition ? true-branch : false-branch; 

当条件求值为真(非零)时,执行:之前的分支,否则执行另一个分支。 这甚至可能返回一个值:

 value = condition ? true-branch : false-branch; 

在您的情况下,返回值是ommited,真正的分支是空的(无事可做)。 然后返回condition的返回值,但不在您的示例中使用。

相当于

 if (!self.itemViews[@(0)]) [self.dataSource slidingViewStack:self viewForItemAtIndex:0 reusingView:[self dequeueItemView]]; 

这是更好的编程风格。

此运算符在Objective C中使用 ,此运算符用于条件运算符。是运行一个语句还是其他语句取决于所使用的逻辑术语和您提供的输入。

以上称为三元运算符或条件运算符。

语法是,

  ?: 

如果条件为真,则将其视为值,否则将被视为值。

请参考http://en.wikipedia.org/wiki/%3F: