首页 > 解决方案 > 嵌套 ObservableObject 中的 @Published var 仅在第二次更改后才更改。SwiftUI 错误?

问题描述

Store1:ObservableObject投入GlobalStore2:ObservableObject使用field1field2MultiStoresDemo2:View. 我在 中输入A字符field1field2而不是在 中重绘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)")
...
}

标签: swiftuicombine

解决方案


推荐阅读