2011-04-29 84 views
2

请原谅我的“新手”问题,但问号是什么,“?”意味着在下面的代码行?什么是“?”在以下语句中的意思

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

回答

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以外的其他语言提供。

+0

非常感谢。 – 2011-04-29 12:49:03

+1

这是一个很好的答案;我只想指出,严格地说,这是“条件操作符”;虽然它通常被称为“三元”,但“三元”仅仅意味着“需要三个操作数”。 – 2011-04-29 20:43:24

+0

这是真的,感谢评论! – 2011-04-30 02:47:10

4

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

它是这样的:

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

这就是所谓的Ternary operation

它的意思是,给定下面的代码:

(condition) ? a : b 

的代码将执行a如果conditiontrueb否则。

在你的情况下,代码的行为一样,如果你写:

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

这是有条件的经营者:x = a ? b : c。如果a为真,则分配bx,否则分配c

3

其短的if语句

在声明1> 0下面的代码检查,如果其真正的第一组将被执行,后如果假它将运行在后面的代码“:”

(1 > 0)? true: false; 
2

条件?valueIfTrue:valueIfFalse

这可以被解读为

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

这显然已经回答了(彻底)以上,但我要把我的帽子(用于关闭的机会,有人刚开始学习编程时发生此绊倒):

这里是一个三元声明我的纯英文的定义(这是什么)

Variable = what_to_check ? true_value : false_value; 

是说:

是what_to_check为真?好吧,然后将变量设置为true_value。如果不是,则将Variable设置为false_value。