gpt4 book ai didi

swift - nil 文字与 Swift 中为 nil 的变量的可选绑定(bind)

转载 作者:搜寻专家 更新时间:2023-11-01 05:48:11 25 4
gpt4 key购买 nike

在 Swift 中,为什么会这样

var x: Int? = nil
if let y: Int? = x { ... }

行为不同于

if let y: Int? = nil { ... }

我的 understanding为什么第一个案例成功表明第二个案例也应该成功,所以我一定不是很理解。

后者失败不是因为无效赋值,也不是因为可选链;否则它似乎与前者相同。为什么后者会失败,它与前者有何不同。第二个可选绑定(bind)究竟是在什么时候以及出于什么原因被放弃的?

最佳答案

if let y: Int? = nil { ... }

相当于

if let y: Int? = nil as Int?? { ... }

相当于

if let y: Optional<Int> = Optional<Optional<Int>>() { ... }

这会尝试转换 Optional<Optional<Int>>Optional<Int> , 它失败了,因为 Optional<Optional<Int>>()不包含 Optional<Int>值(value)。


相当于

var x: Int? = nil
if let y: Int? = x { ... }

if let y: Int? = nil as Int? { ... } 

添加:

正如我在 What does Swift's optional binding do to the type it's arguments? 上的回答.

if let y: Int? = nil as Int? { ... }

编译为:

if let y:Int? = nil as Int? as Int?? { ... }

在这里,我们要注意nil as Int? as Int?? 等于nil as Int?? .前者是Optional(Optional<Int>()) , 但后者是 Optional<Optional<Int>>() .

考虑到这一点,我认为,

So the optional binding in my first example (does indeed) "check inside" and finds nil, which is perfectly valid to assign to Int?; but my second checks and finds Optional(nil), which can't be assigned to Int?

Int?? 的第一个示例“检查内部”并找到 Optional<Int>()值为 Int?可以分配给 Int? 的类型;但是第二个发现没有要分配并且失败了。

关于swift - nil 文字与 Swift 中为 nil 的变量的可选绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26613195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com