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)