繁体   English   中英

什么是?:运算符

[英]What is the ?: operator

在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如果测试untruthy,否则将返回test

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

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

语法是,

     <condition>?<true_part>:<false_part>

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

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

它是三元运算符 ,因为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中使用 ,此运算符用于条件运算符。是运行一个语句还是其他语句取决于所使用的逻辑术语和您提供的输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM