这行代码是什么意思?

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

的吗?还有,迷惑我吧。


当前回答

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

a?b:c

就像

if(a)
    b;
else
    c;

其他回答

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

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

等于

如果(> c) ?a:c ==> = if (a>c)?c:

我们可以用??是迅速的。

有趣的是,在objective-c中,如果你想检查null / nil 例如:

-(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中

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

假设你这样写:

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

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

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

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

在语义上等价于

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

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

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

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

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

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