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

这行代码是什么意思?

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

?:让我困惑。

377631 次浏览

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

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

在语义上等价于

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

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

这是C的一部分,不是Objective-C特有的。下面是if语句的翻译:

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

这只是if-then-else语句的一种简短形式。它的意思与下面的代码相同:

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

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

condition ? valueIfTrue : valueIfFalse

其中只有在选中值时才会计算值。

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

a?b:c

就像

if(a)
b;
else
c;

基于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模式中使用和释放局部变量。增值!

它是三元运算符,类似于if/else语句。

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

在三元运算符中是这样的: 条件?如果条件为真怎么办:如果它为假怎么办;

(a > b) ? what to do if true : what to do if false;
int padding = ([[UIScreen mainScreen] bounds].size.height <= 480) ? 15 : 55;

意味着

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

简单地说,逻辑是

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

我刚学了一些关于三元运算符的新东西。省略中间操作数的简短形式确实很优雅,这是C语言仍然重要的众多原因之一。仅供参考,我第一次真正了解这个是在c#实现的一个例程的上下文中,该例程也支持三元操作符。由于三元运算符是在C语言中,因此在其他本质上是它的扩展的语言中(例如,Objective-C, c#)也是如此。

正如大家所说,它是一种表示条件运算符的方法

if (condition){
true
}
else {
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

我们可以使用??代替?:

三元运算符示例。如果值为isFemale 布尔变量是YES,打印“性别是女性”,否则打印“性别是” 男" < / p >

? 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.

为迅速

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.
有趣的事实,在objective-c中,如果你想检查null / nil 例如:< / p >
-(NSString*) getSomeStringSafeCheck
{
NSString *string = [self getSomeString];
if(string != nil){
return String;
}
return @"";
}

最快捷的方法是:

-(NSString*) getSomeStringSafeCheck
{
return [self getSomeString] != nil ? [self getSomeString] : @"";
}

然后你可以用最简单的方式更新它:

-(NSString*) getSomeStringSafeCheck
{
return [self getSomeString]?: @"";
}

因为在Objective-C中

  1. 如果一个对象为nil,它将返回false作为布尔值;
  2. 三元运算符的第二个参数可以为空,因为它将返回'?'左边的结果。

假设你这样写:

[self getSomeString] != nil?: @"";

第二个参数返回布尔值,因此抛出异常。