这行代码是什么意思?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
在?
和:
迷惑我。
variable ?: anotherVariable
,这意味着什么?
(valOrVar != 0) ? valOrVar : anotherValorvar
这行代码是什么意思?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
在?
和:
迷惑我。
variable ?: anotherVariable
,这意味着什么?
(valOrVar != 0) ? valOrVar : anotherValorvar
Answers:
这是C 三元运算符(Objective-C是C的超集):
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
在语义上等同于
if(inPseudoEditMode) {
label.frame = kLabelIndentedRect;
} else {
label.frame = kLabelRect;
}
没有第一个元素(例如variable ?: anotherVariable
)的三进制表示与(valOrVar != 0) ? valOrVar : anotherValOrVar
?:
是,在左侧为表达式的情况下,不带第一个元素()的三元运算符甚至更好,这是因为?:
防止对其进行多次评估。例如:[myArray firstObject] ? [myArray firstObject] : @"Hello World";
调用firstObject
两次(如果firstObject
未返回nil
),则[myArray firstObject] ?: @"Hello World";
产生相同的结果,但从未调用firstObject
过一次。
简单来说,逻辑就是
(condition) ? {code for YES} : {code for NO}
以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!
这只是编写if-then-else语句的一种简短形式。它的含义与以下代码相同:
if(inPseudoEditMode)
label.frame = kLabelIndentedRect;
else
label.frame = kLabelRect;
三元运算符示例。如果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.
物镜
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.
有趣的是,如果要检查null / nil,请在Objective-c中进行检查,例如:
-(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中:
所以说你写:
[self getSomeString] != nil?: @"";
第二个参数返回一个布尔值,因此引发异常。
众所周知,这是一种表示条件运算符的方式
if (condition){
true
}
else {
false
}
使用三元运算符(condition)? true:false
要添加其他信息,我们迅速使用来表示它??
。
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
而不是?:
我们可以??
迅速使用。