在objective-c中,问号和冒号(?:三元运算符)是什么意思?
这一行代码是什么意思?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
这个?
和:
迷惑我。
这是C 三元运算符 (Objective-C是C的超集):
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
在语义上等同于
if(inPseudoEditMode) { label.frame = kLabelIndentedRect; } else { label.frame = kLabelRect; }
没有第一个元素的三元(例如variable ?: anotherVariable
)意味着与(valOrVar != 0) ? valOrVar : anotherValOrVar
(valOrVar != 0) ? valOrVar : anotherValOrVar
这是三元或条件运算符。 它的基本forms是:
condition ? valueIfTrue : valueIfFalse
这些值只在被select时才被评估。
build立在巴里·沃克的优秀解释…
三元运算符的重要性在于它可以用在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模式中使用和释放局部variables。 FTW!
简而言之,逻辑就是
(condition) ? (code for YES) : (code for NO)
这只是通常的三元运算符 。 如果问号之前的部分为真,则评估并返回冒号前的部分,否则评估并返回冒号后的部分。
a?b:c
就好像
if(a) b; else c;
这是C的一部分,所以它不是Objective-C特有的。 这是一个if
语句的翻译:
if (inPseudoEditMode) label.frame = kLabelIndentedRec; else label.frame = kLabelRect;
这只是写一个if-then-else语句的简短forms。 这意味着与以下代码相同:
if(inPseudoEditMode) label.frame = kLabelIndentedRect; else label.frame = kLabelRect;
它是三元运算符,就像一个if / else语句。
if(a > b) { what to do; } else { what to do; }
三元运算符是这样的:条件? 如果条件成立,该怎么办:如果是假,该怎么办;
(a > b) ? what to do if true : what to do if false;
我刚刚学到了关于三元运算符的新东西。 省略中间操作数的简写forms真正优雅,是C依然相关的多种原因之一。 仅供参考,我首先在C#中实现的一个例程的背景下真正了解了这一点,该例程还支持三元运算符。 由于三元运算符是在C中,所以它是在其他语言,基本上是其扩展(如Objective-C,C#)的原因。
正如大家所说的那样,这是表示条件运算符的一种方式
if (condition){ true } else { false }
使用三元运算符(condition)? true: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
而不是?:
我们可以使用??
很快。
int padding = ([[UIScreen mainScreen] bounds].size.height <= 480) ? 15 : 55;
手段
int padding; if ([[UIScreen mainScreen] bounds].size.height <= 480) padding = 15; else padding = 55;
三元运算符示例。如果isFemale布尔variables的值为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.
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.
对于Swift
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.