在objective-c中,问号和冒号(?:三元运算符)是什么意思?

这一行代码是什么意思?

label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect; 

这个?:迷惑我。

这是C 三元运算符 (Objective-C是C的超集):

 label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect; 

在语义上等同于

 if(inPseudoEditMode) { label.frame = kLabelIndentedRect; } else { label.frame = kLabelRect; } 

没有第一个元素的三元(例如variable ?: anotherVariable )意味着与(valOrVar != 0) ? valOrVar : anotherValOrVar (valOrVar != 0) ? valOrVar : anotherValOrVar

这是三元或条件运算符。 它的基本forms是:

 condition ? valueIfTrue : valueIfFalse 

这些值只在被select时才被评估。

build立在巴里·沃克的优秀解释…

三元运算符的重要性在于它可以用在if-else不能的地方。 即:在条件或方法参数内。

 [NSString stringWithFormat: @"Status: %@", (statusBool ? @"Approved" : @"Rejected")] 

这对于预处理器常量来说是一个很好的用处:

 // in your pch file... #define statusString (statusBool ? @"Approved" : @"Rejected") // in your m file... [NSString stringWithFormat: @"Status: %@", statusString] 

这使您不必在if-else模式中使用和释放局部variables。 FTW!

简而言之,逻辑就是

(condition) ? (code for YES) : (code for NO)

这只是通常的三元运算符 。 如果问号之前的部分为真,则评估并返回冒号前的部分,否则评估并返回冒号后的部分。

 a?b:c 

就好像

 if(a) b; else c; 

这是C的一部分,所以它不是Objective-C特有的。 这是一个if语句的翻译:

 if (inPseudoEditMode) label.frame = kLabelIndentedRec; else label.frame = kLabelRect; 

这只是写一个if-then-else语句的简短forms。 这意味着与以下代码相同:

 if(inPseudoEditMode) label.frame = kLabelIndentedRect; else label.frame = kLabelRect; 

它是三元运算符,就像一个if / else语句。

 if(a > b) { what to do; } else { what to do; } 

三元运算符是这样的:条件? 如果条件成立,该怎么办:如果是假,该怎么办;

 (a > b) ? what to do if true : what to do if false; 

我刚刚学到了关于三元运算符的新东西。 省略中间操作数的简写forms真正优雅,是C依然相关的多种原因之一。 仅供参考,我首先在C#中实现的一个例程的背景下真正了解了这一点,该例程还支持三元运算符。 由于三元运算符是在C中,所以它是在其他语言,基本上是其扩展(如Objective-C,C#)的原因。

正如大家所说的那样,这是表示条件运算符的一种方式

 if (condition){ true } else { false } 

使用三元运算符(condition)? true:false (condition)? true:false要添加额外的信息,在swift中,我们有新的方式来表示它使用??

 let imageObject: UIImage = (UIImage(named: "ImageName")) ?? (initialOfUsername.capitalizedString).imageFromString 

这与之类似

 int a = 6, c= 5; if (a > c) { a is greater } else { c is greater } 

相当于

if (a>c)?a:c ==>等于if (a>c)?:c

而不是?:我们可以使用?? 很快。

 int padding = ([[UIScreen mainScreen] bounds].size.height <= 480) ? 15 : 55; 

手段

 int padding; if ([[UIScreen mainScreen] bounds].size.height <= 480) padding = 15; else padding = 55; 

三元运算符示例。如果isFemale布尔variables的值为YES,则打印“GENDER IS FEMALE”,否则“GENDER IS MALE”

 ? means = execute the codes before the : if the condition is true. : means = execute the codes after the : if the condition is false. 

Objective-C的

 BOOL isFemale = YES; NSString *valueToPrint = (isFemale == YES) ? @"GENDER IS FEMALE" : @"GENDER IS MALE"; NSLog(valueToPrint); //Result will be "GENDER IS FEMALE" because the value of isFemale was set to YES. 

对于Swift

 let isFemale = false let valueToPrint:String = (isFemale == true) ? "GENDER IS FEMALE" : "GENDER IS MALE" print(valueToPrint) //Result will be "GENDER IS MALE" because the isFemale value was set to false.