I put Store1:ObservableObject
into GlobalStore2:ObservableObject
and use field1
and field2
in MultiStoresDemo2:View
. I type A
character in field1
, field2
doesn't redraw in View
. I type B
character in field1
, field2
shows A
character only.
Is this SwiftUI bug?
I wrote a little code to demo how to reproduce it.
final class GlobalStore2: ObservableObject {
static let shared = GlobalStore2()
@Published var store1 = Store1()
}
final class Store1: ObservableObject {
static let shared = Store1()
@Published var field1 = "" {
didSet {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
self.field2 = self.field1
}
}
}
@Published var field2 = ""
}
struct MultiStoresDemo2: View {
@ObservedObject var store = GlobalStore2.shared
var body: some View {
VStack {
TextField("field1", text: $store.store1.field1)
Text("field2 \(store.store1.field2)")
}
}
}
If I change my code like below it will works
struct MultiStoresDemo2: View {
@ObservedObject var store1 = Store1.shared
...
Text("field2 \(Store1.shared.field2)")
Text("field2 \(store1.field2)")
...
}