You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI跨视图无法向ObservableObject管理的数组追加新数据求助

问题根因

ContentView和Shop两个视图各自创建了独立的Products实例,两者没有数据关联,所以在Shop中添加的数据只会保存在Shop自己持有的cart对象里,不会同步到ContentView的cart中,自然列表看不到新增数据。

解决方法

  1. 修改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))
            }
        }
    }
}
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 11:27:03