SwiftUI跨视图无法向ObservableObject管理的数组追加新数据求助
问题根因
ContentView和Shop两个视图各自创建了独立的Products实例,两者没有数据关联,所以在Shop中添加的数据只会保存在Shop自己持有的cart对象里,不会同步到ContentView的cart中,自然列表看不到新增数据。
解决方法
- 修改Shop视图的属性定义,不要在Shop内部初始化
Products实例,改为从外部传入:
// Shop.swift 修改后代码 struct Shop: View { @ObservedObject var cart: Products var body: some View { VStack{ Button("Add Product To Cart") { cart.addProduct(product: Product(name: "Name", price: 399)) } } } }
- 在ContentView跳转Shop的时候,把自己持有的cart对象传递给Shop:
// ContentView中NavigationLink部分修改 NavigationLink(destination: Shop(cart: cart)) { Text("Go Shop") }
可选优化
如果你的Products实例需要在更多层级的视图中共享,可以在App入口或者根视图使用@StateObject初始化,再通过environmentObject注入到视图树中,避免逐层传递:
// 入口App文件示例 @main struct YourApp: App { @StateObject var cart = Products() var body: some Scene { WindowGroup { ContentView() .environmentObject(cart) } } } // 此时ContentView和Shop都可以改为@EnvironmentObject var cart: Products,不需要手动传参
内容的提问来源于stack exchange,提问作者Milad
相关产品推荐
相关产品推荐

