objective-c - ios三目运算符




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

三元运算符示例。如果isFemale布尔变量的值为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.

这段代码是什么意思?

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

这个?:迷惑我。


它是三元或条件运算符。 它的基本形式是:

condition ? valueIfTrue : valueIfFalse

这些值只在被选中时才被评估。


建立在Barry Wark的绝佳解释之上......

三元运算符的重要性在于它可以用于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模式中使用和释放局部变量。 FTW!


我刚刚学到了关于三元运算符的新内容。 省略中间操作数的简写形式非常优雅,并且是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

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


简单地说,逻辑就是

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


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

a?b:c

就好像

if(a)
    b;
else
    c;

这是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


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

手段

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




conditional-operator