什么是“?”在下面的陈述中表示

时间:2011-04-29 12:40:45

标签: iphone objective-c

原谅我的“新手”问题,但问题是什么,“?”在fololowing代码行中意味着什么?

self.navigationItem.leftBarButtonItem.title = (editing) ?
    NSLocalizedString(@"Done", @"Done") : NSLocalizedString(@"Edit", @"Edit");

9 个答案:

答案 0 :(得分:12)

这是一个三元语句,?是条件运算符。该声明基本上是在说:

if (editing) {
    self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Done", @"Done");
} else {
    self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Edit", @"Edit");
}

你可以这样想:

? - 如果前面的陈述为真,请在紧接着后执行代码。

: - 否则/在此之后立即运行代码。

您可以在此处阅读更多内容http://en.wikipedia.org/wiki/Ternary_operation。您会发现此构造可用于除C / Objective-C之外的许多语言。

答案 1 :(得分:4)

它被称为三元运算符,它就像一个if语句但在一行中。

就像:

if (editing)
  self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Done", @"Done");
else
  self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Edit", @"Edit");

答案 2 :(得分:4)

这是条件运算符:x = a ? b : c。如果a为真,则会b指定x,否则会指定c

答案 3 :(得分:3)

它被称为Ternary operation

这意味着,给出以下代码:

(condition) ? a : b

如果acondition,则代码将执行true,否则为b

在您的情况下,代码的行为与您写的相同:

if (editing) {
  self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Done", @"Done");
} else {
  self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Edit", @"Edit");
}

答案 4 :(得分:3)

简短的if语句

在声明1>下面的代码中检查0是否为真,第一组将被执行,在“?”之后如果它是假的,它将运行“:”后面的代码

(1 > 0)? true: false;

答案 5 :(得分:2)

使用了三元运算符http://www.techotopia.com/index.php/Objective-C_Operators_and_Expressions#The_Ternary_Operator。 这意味着如果编辑变量为TRUE,则使用NSLocalizedString(@“Done”,@“Done”)初始化标题,否则使用NSLocalizedString(@“Edit”,@“Edit”)初始化。

答案 6 :(得分:2)

条件? valueIfTrue:valueIfFalse

这可以理解为

if (editing)
    self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Done", @"Done");
else
    self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Edit", @"Edit");

答案 7 :(得分:1)

答案 8 :(得分:1)

这显然已经(完全)在上面得到了回答,但是我正在戴上帽子(因为有些人只是学习编程偶然发现了这一点):

这是我对三元语句的简明定义(这是什么)

Variable = what_to_check ? true_value : false_value;

说:

是what_to_check是真的吗?好的,然后将Variable设置为true_value。如果不是,请将Variable设置为false_value。