c语言中的冒号运算符,问号和冒号(?:三元运算符)在objective |
您所在的位置:网站首页 › 什么是引号什么是冒号 › c语言中的冒号运算符,问号和冒号(?:三元运算符)在objective |
这行代码是什么意思? label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect; 江户十一〔0〕和江户一〔1〕把我弄糊涂了。 它是三元if-then-else运算符 请注意,这应该是问号,而不是引号。 哦,对不起,你说得对。 编译器似乎也允许variable ?: anotherVariable,这意味着什么? 没有第一元素的三元与(valOrVar != 0) ? valOrVar : anotherValorvar相同。 这是C三元运算符(Objective-C是C的超集): label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect; 在语义上等价于 if(inPseudoEditMode) { label.frame = kLabelIndentedRect; } else { label.frame = kLabelRect; } 没有第一元素的三元(如variable ?: anotherVariable)表示与(valOrVar != 0) ? valOrVar : anotherValOrVar相同。 (更新:哎呀!三元运算符最重要的是它可以用于if-else不能使用的地方。ie:在条件或方法参数内。[nsstring stringwithformat:@"状态:%@",(statusbool?@"approved":@"rejected")]…这对于预处理器常量是一个很好的用途:define statusstring(statusbool?@"approved":@"rejected")…然后:[nsstring stringwithformat:@"status:%@",statusstring]这样可以避免在if-else模式中使用和释放局部变量。FTW! 这就是为什么! 可能值得一提的是,在左侧是表达式的情况下,没有第一个元素(?:的三元运算符甚至更好,因为?:防止对它进行多次计算。例如:[myArray firstObject] ? [myArray firstObject] : @"Hello World";两次调用firstObject(如果firstObject不返回nil,其中[myArray firstObject] ?: @"Hello World";产生相同的结果,但从未多次调用firstObject。 最后~~我已经用这个接线员很久了(我最喜欢的迪福),但不知道它叫什么。这个大问题现在得到了解答。谢谢 还想补充一下,由于emoji与singer相似,没有第一个元素?:的三元运算符也被称为elvis运算符。当然,在这种情况下,当我们除去一个元素时,它不再是一个三元运算符,而是一个二元运算符。二进制运算符包括我们编程时通常使用的绝大多数运算符(*、+、-、^、|、||、&、>>等)。 它是三元或条件运算符。它的基本形式是: condition ? valueIfTrue : valueIfFalse 其中只有在选择值时才会对其进行评估。 这本应该被投得更多,简单明了。 只是澄清一下,这并不局限于价值观。condition ? codeIfTrue : codeIfFalse 简单地说,逻辑是 (condition) ? {code for YES} : {code for NO} 简单而优雅 这实际上是最好的答案,因为其他答案意味着结果只能有一个"值",而这表明结果可以放置任意代码。 以巴里·沃克的精彩解释为基础… 三元运算符最重要的是它可以用于if-else不能使用的地方。ie:在条件或方法参数内。 [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! 这只是通常的三元运算符。如果问号前的部分为真,则计算并返回冒号前的部分,否则计算并返回冒号后的部分。 a?b:c 就像 if(a) b; else c; 这只是写一个if-then-else语句的简短形式。其含义与以下代码相同: if(inPseudoEditMode) label.frame = kLabelIndentedRect; else label.frame = kLabelRect; 这是C的一部分,所以它不是客观C特定的。以下是一份if声明的翻译: if (inPseudoEditMode) label.frame = kLabelIndentedRec; else label.frame = kLabelRect; 有趣的事实,如果你想检查空/空例如: -(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]?: @""; } 因为在目标C中: 如果一个对象为零,它将作为布尔值返回false; 三元运算符的第二个参数可以为空,因为它将返回"?"左侧的结果。 所以假设你写: [self getSomeString] != nil?: @""; 第二个参数返回布尔值,因此引发异常。 Ternary operator example.If the value of isFemale boolean variable is YES, print"GENDER IS FEMALE" otherwise"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. Objtovi-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. 为斯威夫特 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. 正如大家所说,它是一种表示条件运算符的方法 if (condition){ true } else { 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。 我们可以用??来代替?:,它是快速的。 我刚刚学到了关于三元运算符的一些新知识。省略中间操作数的简短形式是非常优雅的,也是C保持相关的众多原因之一。仅供参考,我第一次真正了解这一点是在C中实现的一个例程的上下文中进行的,它也支持三元运算符。由于三元运算符是用C表示的,因此它可以用其他语言表示,这些语言本质上是其扩展(例如,objective-c、c)。 int padding = ([[UIScreen mainScreen] bounds].size.height what to do; } 在三元运算符中,它是这样的:条件?条件为真时该怎么办:条件为假时该怎么办; (a > b) ? what to do if true : what to do if false; 我很感激你试图为这个网站做贡献,但是发布简单重复其他答案的答案通常是不鼓励的,因为它只会把问题搞得一团糟。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |