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

SwiftUI中CoreData一对多关系下计算并展示所有Depot实体总价值的问题

解决所有Depot总价值的计算与展示问题

没问题,我来帮你搞定这个所有Depot总价值的计算和展示需求~

你已经实现了单个Depot的价值求和,现在只需要对所有FetchedResults<Depot>的结果做一次累加就可以了。具体步骤如下:

1. 添加总价值计算属性

在你的Portfolio结构体里,新增一个计算属性来计算所有Depot的总价值:

struct Portfolio: View {
    // 保留你原有的所有属性和代码...
    
    // 新增:计算所有Depot的总价值
    private var totalPortfolioValue: Double {
        // 遍历所有depots,累加每个depot的sumOfDepot结果
        depots.reduce(0.0) { accumulatedValue, depot in
            accumulatedValue + depot.sumOfDepot()
        }
        // 简化写法也可以写成:depots.reduce(0) { $0 + $1.sumOfDepot() }
    }
    
    // 你的body部分...
}

2. 在视图中展示总价值

接下来,你可以在现有视图的合适位置(比如列表上方)添加总价值的展示,比如:

var body: some View {
    VStack(alignment: .leading) {
        // 新增:展示总组合价值
        HStack {
            Text("Total Portfolio Value")
                .font(.subheadline)
                .foregroundColor(.secondary)
            Spacer()
            Text("\(totalPortfolioValue as NSNumber, formatter: formatter) €")
                .font(.title2)
                .fontWeight(.semibold)
        }
        .padding(.horizontal, g.size.width / 40)
        .padding(.bottom, 12)
        
        // 你原有的ScrollView列表部分
        ScrollView(showsIndicators: false) {
            Color.clear
                .padding(.bottom, g.size.height / -200)
            ForEach(depots) { depot in
                // 保留你原有的每个Depot的视图代码...
            }
        }
    }
}

原理说明

  • reduce方法会从初始值0.0开始,依次将每个depot的sumOfDepot()结果累加到总和中,最终得到所有Depot的总价值。
  • 这个计算属性是实时更新的:当CoreData中的Depot或其关联的Aktien数据发生变化时,depots的FetchedResults会自动刷新,totalPortfolioValue也会随之重新计算。

这样就能轻松实现你需要的所有Depot总价值展示啦~

内容的提问来源于stack exchange,提问作者SPR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:47:42