Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift IntValue??0 == -1? &引用-&引用;:&引用+&引用;这是什么意思?_Swift_Ternary Operator - Fatal编程技术网

Swift IntValue??0 == -1? &引用-&引用;:&引用+&引用;这是什么意思?

Swift IntValue??0 == -1? &引用-&引用;:&引用+&引用;这是什么意思?,swift,ternary-operator,Swift,Ternary Operator,我正在导入价格信息并添加+或- 我将标题代码打印出来(),它可以工作,但我不知道它是什么意思 print("\(IntValue ?? 0 == -1 ? "-" : "+")") 请给我简单解释一下。变量IntValue是可选的,这意味着它要么是整数,要么是nil输入值??0表示如果存在IntValue,则使用IntValue的值。如果IntValue为nil,则使用值0。接下来,将该值与-1进行比较。如果该值等于-1,则打印-。如果该值不等于-1,则打印+ 下面是仅包含if语句的等效代码:

我正在导入价格信息并添加+或-

我将标题代码打印出来(),它可以工作,但我不知道它是什么意思

print("\(IntValue ?? 0 == -1 ? "-" : "+")")

请给我简单解释一下。

变量
IntValue
是可选的,这意味着它要么是整数,要么是
nil
<代码>输入值??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("+")
}

凯文的回答很好

有助于进一步解释的一些背景:

您发布的代码同时使用了两个相当神秘的运算符

是零合并运算符

它接受一个可选值,该值可以包含nil,并在不包含nil时提供一个新值以供使用


编辑: (请注意,您可以跳过nil合并运算符,改用
IntValue==-1
。这是因为只有
-1
的非nil值等于
-1
。包含nil的可选值不等于
-1

你可以把这句话改写成

print("\(IntValue == -1 ? "-" : "+")")
并得到相同的结果。)


下一个棘手的问题是“三元运算符”。这来自C语言,它非常神秘,但也非常有用

它的形式为
布尔值
<代码>值为真:
值为假

其中,
boolean
是一个布尔表达式,其计算结果为
true
false

如果
boolean
为真,则整个三元表达式的结果为
value\u for_-true
子表达式

如果
boolean
为false,则整个三元表达式的结果为\u false子表达式的

IntValue??0==-1
是三元表达式的布尔部分。如果IntValue为-1,则其计算结果为true。如果IntValue包含任何其他值,或者如果它包含nil,则其计算结果为false


(注意变量和let常量应该以小写字母开头,因此
IntValue
应该是
IntValue

如果IntValue!=nil
因为您只想使用
IntValue
的值,如果它不是
nil
;否则使用
0
War10ck是正确的。如果IntValue!=无