6

在一个 Objective-C 代码的例子中,我发现了这个操作符

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

该代码确实在 Apple LLVM 4.2 下编译。

我遇到的唯一一件事是成为矢量运算符,但我不认为 Objective-C 和 C 具有矢量运算符。所以有人可以提供这个运营商的参考和/或文件。

4

6 回答 6

13

?:是 C条件运算符

a ? b : c

如果不同于并且如果等于则产生b值。a0ca0

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

 x ? : y 

相当于

 x ? x : y
于 2013-07-31T09:39:00.883 回答
5

您熟悉三元运算符吗?通常出现在以下样式中:

test ? result_a : result_b;

这里所发生的只是第一个分支没有给出,所以在肯定的情况下什么都不会发生。类似于以下内容:

test ?: result_b;

由于 C 的评估方式,result_b如果 test 不真实,则返回,否则返回test

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

于 2013-07-31T09:38:01.380 回答
2

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

语法是,

     <condition>?<true_part>:<false_part>

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

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

于 2013-07-31T09:41:44.143 回答
1

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

关于这个的一些教程

a = x ? :是的;

表达式等价于

a = x ? x : 是的;

于 2013-07-31T09:37:21.880 回答
1

它是 ?算子,称为三元算子,它的使用方式是这样的:

condition ? true-branch : false-branch; 

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

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

在您的情况下,返回值被省略并且 true-branch 为空(无事可做)。然后返回返回值,condition但在您的示例中未使用。

相当于

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

恕我直言,这是更好的编程风格。

于 2013-07-31T09:40:40.750 回答
1

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

于 2013-07-31T09:49:47.100 回答