这行代码是什么意思?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
的吗?还有,迷惑我吧。
这行代码是什么意思?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
的吗?还有,迷惑我吧。
当前回答
这是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;
有趣的是,在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特有的。下面是if语句的翻译:
if (inPseudoEditMode)
label.frame = kLabelIndentedRec;
else
label.frame = kLabelRect;
基于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模式中使用和释放局部变量。增值!
三元运算符示例。如果值为isFemale 布尔变量是YES,打印“性别是女性”,否则打印“性别是” 男性”
? 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是否是女性= YES; NSString * valuetopprint = (isFemale == YES) ?@“性别是女性”:@“性别是男性”; NSLog (valueToPrint);//结果将是"GENDER IS FEMALE",因为isFemale的值被设置为YES。
为迅速
let isFemale = false let valuetopprint:String = (isFemale == true) ?" gender is female ": " gender is male " print(valuetopprint) //Result将是"GENDER IS MALE",因为isFemale值被设置为false。