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时,我使用异步而不是代码