gpt4 book ai didi

swift - 为什么在初始化程序中设置时调用 didSet?

转载 作者:行者123 更新时间:2023-12-04 21:28:27 25 4
gpt4 key购买 nike

我在玩 SwiftUI,我有一个看起来像这样的类:

class Foo: ObservableObject {

@Published var foo: Int! { // Implicit unwrapped optional
didSet {
print("foo")
}
}

init() {
self.foo = 1
}
}

didSet 总是被调用。根据 Apple docs它不应该被调用。 @Published 有什么特别之处吗?属性包装器?

最佳答案

所有关于类型......好吧,让我们考虑代码......

案例1: @Published var foo: Int
实际上是

var foo: Int
var _foo: Published<Int>

所以
init() {
self.foo = 1 // << Initialization
}

案例2: @Published var foo: Int! (同样适用于 @Published var foo: Int? )

实际上是
var foo: Int!
var _foo: Published<Int?> // !! Not primitive - generics class, types differ

所以
init() {
self.foo = 1 // << Assignment of Int(1)
}

因此,IMO,答案是肯定的,这是@Published 的特别之处。

注意:如果在 self.foo = 1处设置断点,您可以在运行时看到所有图片。行并使用 ^F7(Control-Step Into)按照说明进行两种情况......非常有趣的内部结构。

关于swift - 为什么在初始化程序中设置时调用 didSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59448624/

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