整数值 ?? 0 == -1? "-": "+" 是什么意思?
IntValue ?? 0 == -1? "-": "+" What does this mean?
我正在导入价格信息并添加 + 或 -。
我把标题代码放在print()里面,可以用,但不知道是什么意思。
print("\(IntValue ?? 0 == -1 ? "-" : "+")")
请简单说明一下。
变量 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("+")
}
Kevin 的回答非常好。
一些有助于进一步解释的背景:
您发布的代码同时使用了两个相当神秘的运算符。
??
是零合并运算符。
它采用一个可选值,可以包含 nil,并在 确实 包含 nil 时提供一个新值。
编辑:
(请注意,您可以跳过 nil 合并运算符并改用 IntValue == -1
。之所以有效,是因为只有 -1
的非 nil 值等于 -1
。包含 nil 的可选值不等于 -1
.
您可以将该行重写为
print("\(IntValue == -1 ? "-" : "+")")
得到相同的结果。)
下一个棘手的问题是“三元运算符”。这来自C。它很神秘,但也很有用。
它采用 boolean
的形式? value_for_true
: value_for_false
其中 boolean
是一个布尔表达式,计算结果为 true
或 false
。
如果boolean
为真,那么整个三元表达式的结果就是value_for_true
子表达式。
如果 boolean
为假,则整个三元表达式的结果是 value_for_false
子表达式。
IntValue ?? 0 == -1
是三元表达式的布尔部分。如果 IntValue 为 -1,则计算结果为真。如果 IntValue 包含任何其他值,或者如果它包含 nil,则评估为 false。
(注意变量和let常量要以小写字母开头,所以IntValue
应该是intValue
。)
我正在导入价格信息并添加 + 或 -。
我把标题代码放在print()里面,可以用,但不知道是什么意思。
print("\(IntValue ?? 0 == -1 ? "-" : "+")")
请简单说明一下。
变量 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("+")
}
Kevin 的回答非常好。
一些有助于进一步解释的背景:
您发布的代码同时使用了两个相当神秘的运算符。
??
是零合并运算符。
它采用一个可选值,可以包含 nil,并在 确实 包含 nil 时提供一个新值。
编辑:
(请注意,您可以跳过 nil 合并运算符并改用 IntValue == -1
。之所以有效,是因为只有 -1
的非 nil 值等于 -1
。包含 nil 的可选值不等于 -1
.
您可以将该行重写为
print("\(IntValue == -1 ? "-" : "+")")
得到相同的结果。)
下一个棘手的问题是“三元运算符”。这来自C。它很神秘,但也很有用。
它采用 boolean
的形式? value_for_true
: value_for_false
其中 boolean
是一个布尔表达式,计算结果为 true
或 false
。
如果boolean
为真,那么整个三元表达式的结果就是value_for_true
子表达式。
如果 boolean
为假,则整个三元表达式的结果是 value_for_false
子表达式。
IntValue ?? 0 == -1
是三元表达式的布尔部分。如果 IntValue 为 -1,则计算结果为真。如果 IntValue 包含任何其他值,或者如果它包含 nil,则评估为 false。
(注意变量和let常量要以小写字母开头,所以IntValue
应该是intValue
。)