这行代码是什么意思?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
的吗?还有,迷惑我吧。
这行代码是什么意思?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : 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?: @"";
第二个参数返回布尔值,因此抛出异常。
其他回答
有趣的是,在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?: @"";
第二个参数返回布尔值,因此抛出异常。
简单地说,逻辑是
(条件)?{YES代码}:{NO代码}
这是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/else语句。
if(a > b) {
what to do;
}
else {
what to do;
}
在三元运算符中是这样的: 条件?如果条件为真怎么办:如果它为假怎么办;
(a > b) ? what to do if true : what to do if false;
这是C的一部分,不是Objective-C特有的。下面是if语句的翻译:
if (inPseudoEditMode)
label.frame = kLabelIndentedRec;
else
label.frame = kLabelRect;