嵌套ObservableObject中的@Published var仅在第二次更改后才更改。 SwiftUI错误?

时间:2019-12-20 11:06:54

标签: swiftui combine

我将Store1:ObservableObject放入GlobalStore2:ObservableObject中,并在field1中使用field2MultiStoresDemo2:View。 我在A中键入field1字符,field2不会在View中重绘。 我在B中输入field1字符,field2仅显示A字符。

这是SwiftUI错误吗?

我写了一些代码来演示如何重现它。

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)")
        }
    }
}

如果我像下面那样更改代码,它将起作用

struct MultiStoresDemo2: View {
    @ObservedObject var store1 = Store1.shared
...
            Text("field2 \(Store1.shared.field2)")
            Text("field2 \(store1.field2)")
...
}

0 个答案:

没有答案