Swiftui @嵌套ObserveObject中已发布的变量仅在第二次更改后更改。迅捷虫?

Swiftui @嵌套ObserveObject中已发布的变量仅在第二次更改后更改。迅捷虫?,swiftui,combine,Swiftui,Combine,我将Store1:observeobject放入GlobalStore2:observeobject中,并在MultiStoresDemo2:View中使用field1和field2。 我在field1中键入A字符,field2不会在视图中重新绘制。 我在field1中键入B字符,field2仅显示A字符 这是SwiftUI bug吗 我写了一个小代码来演示如何复制它 final class GlobalStore2: ObservableObject { static let shar

我将
Store1:observeobject
放入
GlobalStore2:observeobject
中,并在
MultiStoresDemo2:View
中使用
field1
field2
。 我在
field1
中键入
A
字符,
field2
不会在
视图中重新绘制。
我在
field1
中键入
B
字符,
field2
仅显示
A
字符

这是SwiftUI bug吗

我写了一个小代码来演示如何复制它

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:视图{
@ObservedObject var store1=store1.shared
...
文本(“field2\(Store1.shared.field2)”)
文本(“field2\(store1.field2)”)
...
}

我没有问你为什么要这样做(我不会),但似乎是因为
.asyncAfter
这是一个看不见的刷新流,因为只要
.async
它就可以正常工作,而且根本不会延迟。@Asperi如果你将field1移动到GlobalStore2,我的代码就会正常工作。我制作了这个小演示来解释我在项目中遇到的问题。当我试图将大型全球商店分成几个部分时。当我调用服务器API时,我使用异步而不是代码