Swift-带问号的左侧操作数

Swift-带问号的左侧操作数,swift,Swift,我原以为上面的代码会打印1,但实际上它打印了nil。我猜,?使程序跳过I?=1当i为nil时 即使我替换了I?=1带有i?+=1,它仍然可以运行和打印nil var i: Int? i? = 1 print(i) i?是Int?和1是Int,但不知何故+运算符仍在两种不同类型上工作,并通过了编译器检查 谁能帮我解释一下发生了什么事?如果我们能有一份关于这种行为的官方文件,那就太好了。这是在foo?.bar=123中 如果将类型更改为Int,编译器将抱怨: 变量i:Int 我?=1//无法对“I

我原以为上面的代码会打印
1
,但实际上它打印了
nil
。我猜,
使程序跳过
I?=1
i
nil

即使我替换了
I?=1带有
i?+=1
,它仍然可以运行和打印
nil

var i: Int?
i? = 1
print(i)
i?
Int?
1
Int
,但不知何故
+
运算符仍在两种不同类型上工作,并通过了编译器检查

谁能帮我解释一下发生了什么事?如果我们能有一份关于这种行为的官方文件,那就太好了。

这是在
foo?.bar=123

如果将类型更改为
Int
,编译器将抱怨:

变量i:Int 我?=1//无法对“Int”类型的非可选值使用可选链接
从上面的链接参考:

赋值是可选链接的一部分,这意味着不会计算
=
运算符右侧的任何代码


您可以在Swift basics上找到更多信息

在您的示例中,
i
是可选的Int。若要为其赋值,请

变量i:Int? i=1 如果要为其计算新值,可以使用
If let
(下例中的
x
变量)的
guard let
使用可选绑定或强制展开,如
print()
语句中所述

变量i:Int? i=1 如果设x=i{ i=x+1 } 打印(i!)
我阅读了本节,但我认为这不是可选的链接。你如何解释
i?+=1
?同样的方法。如果
i
nil
i?+=1
不会评估作业。另一方面,如果它说
3
,它会将
i
设置为
4
。正如我在问题中所说,
i?
Int?
1
Int
。通常,若在两种不同类型上使用
+
运算符,编译器将抛出错误。但在本例中,它没有。
i
Int?
<代码>i?是可选的链接。围绕optionals的所有内容都涉及到语法糖。当您执行
时,让x:Int?=4
,你真的是在说
让x:Optional=Optional.some(4)
。但是写起来会很麻烦,所以编译器会帮你做。对不起,也许你误解了。简言之,我的问题是如何Int?和Int可与+运算符一起使用。
var i: Int?
i? += 1
print(i)