我在玩 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/