什么是?:运算符

时间:2013-07-31 09:33:42

标签: objective-c c operators

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

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

代码在Apple LLVM 4.2下编译。

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

6 个答案:

答案 0 :(得分:10)

?:是C 条件运算符

a ? b : c
如果ba不同,则

会产生0值;如果c等于a,则会产生0

GNU扩展(Conditional with Omitted Operand)允许在没有第二个操作数的情况下使用它:

 x ? : y 

相当于

 x ? x : y

答案 1 :(得分:3)

您熟悉Ternary operator吗? 通常在风格中看到:

test ? result_a : result_b;

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

test ?: result_b;

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

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

答案 2 :(得分:2)

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

语法是,

     <condition>?<true_part>:<false_part>

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

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

答案 3 :(得分:1)

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

有些tutorial

  

a = x? :y;

表达式相当于

  

a = x? x:y;

答案 4 :(得分:1)

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

condition ? true-branch : false-branch; 

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

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

在你的情况下,返回值是ommited,true-branch是空的(无事可做)。然后返回condition的返回值,但不在您的示例中使用。

相当于

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

这是非常好的编程风格。

答案 5 :(得分:1)

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