【发布时间】:2020-04-03 09:13:17
【问题描述】:
我有这段代码,如果我用 += 设置我发布的变量,didSet 将不会被调用。显式添加有效,这是错误还是有意的?
import SwiftUI
class Model : ObservableObject {
@Published var counter : Int = 0 {
didSet {
print("did set called")
}
}
}
struct ContentView: View {
@EnvironmentObject var model : Model
var body: some View {
VStack {
Text("\(model.counter)")
Button(action: {
print("before")
self.model.counter += 1
print("after")
}) {
Text("Add +=")
}
Button(action: {
print("before")
self.model.counter = self.model.counter + 1
print("after explicit +")
}) {
Text("Add")
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView().environmentObject(Model())
}
}
【问题讨论】:
-
关于why的问题,真的,只有苹果才能肯定回答。 ;)
-
好的,不好的问题。这是一个错误吗?我纠正了我的问题;)
-
不错,只是更适合forums.developer.apple.com。我怀疑这里有没有苹果公司的人。 IMO,不是错误。
-
作为一种解决方法,您可以使用 $counter.sink 并在那里执行您的自定义逻辑。 $counter 是出版商