Enk*_*kha 3 ternary-operator swift
我正在导入价格信息并添加+或 - .
我把标题代码放在print()中它可以工作,但我不知道它意味着什么.
print("\(IntValue ?? 0 == -1 ? "-" : "+")")
Run Code Online (Sandbox Code Playgroud)
请简要向我解释一下.
Dun*_*n C 10
凯文的答案非常好.
一些有助于进一步解释的背景:
您发布的代码使用了两个相当神秘的运算符.
?? 是零合并算子.
它带有一个可选的值,它可以包含零,并提供当它使用一个新的值不包含零.
(注意,您可以跳过nil-coalescing运算符并使用IntValue == -1.这是有效的,因为只有非零值-1等于-1.包含nil的可选项不等于-1.
您可以将该行重写为
print("\(IntValue == -1 ? "-" : "+")")
Run Code Online (Sandbox Code Playgroud)
得到相同的结果.)
下一个棘手的问题是"三元运算符".这来自C.它非常神秘,但也很有用.
它采取的形式boolean?value_for_true:value_for_false
哪个boolean是布尔表达式,其求值为true或false.
如果boolean为真,那么整个三元表达式的结果就是value_for_true子表达式.
如果boolean为假,则整个三元表达式的结果是value_for_false子表达式.
IntValue ?? 0 == -1是三元表达式的布尔部分.如果IntValue为-1,则计算结果为true.如果IntValue包含任何其他值,或者它包含nil,则计算结果为false.
(注意变量和常量应该以小写字母开头,所以IntValue应该是intValue.)
变量IntValue是可选的,这意味着它是一个整数或nil.IntValue ?? 0表示如果IntValue存在,则使用值IntValue.如果IntValue是nil,则使用值0.接下来,将该值与-1进行比较.如果该值等于-1,则打印-.如果该值不等于-1,则打印+.
这里只有if语句的等效代码:
var defaultInt = 0
if IntValue != nil {
defaultInt = IntValue! // force unwrap the optional value
}
if defaultInt == -1 {
print("-")
}
else {
print("+")
}
Run Code Online (Sandbox Code Playgroud)