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

SwiftUI嵌套ForEach筛选数据:按分类展示盆景内容

解决方案

情况1:CoreData已建立Category与Bonsai的关联关系

如果你的CoreData模型里已经给CategoryModel和BonsaiModel设置了一对多关联(比如CategoryModel有@NSManaged public var bonsais: NSSet?),直接通过关联属性获取对应分类的盆景即可,无需额外筛选:

修改DisclosureGroup内部的遍历代码:

DisclosureGroup(category.name ?? "未命名分类") {
    // 将遍历全部bonsaiList改为遍历当前分类关联的bonsais
    ForEach(Array(category.bonsais ?? []), id: \.self) { bonsai in
        Text((bonsai as? BonsaiModel)?.name ?? "无名盆景")
        // 替换成你的盆景展示视图
    }
}

CoreData关联返回的是NSSet类型,需要转成Array才能用ForEach遍历,同时注意类型转换。

情况2:CoreData未建立关联关系,用filter筛选

如果没设置关联,就通过filter方法,根据分类的唯一标识(比如id)匹配对应的盆景:

假设CategoryModel有id属性,BonsaiModel有categoryId属性对应分类id,代码修改如下:

DisclosureGroup(category.name ?? "未命名分类") {
    ForEach(bonsaiList.filter { $0.categoryId == category.id }, id: \.self) { bonsai in
        Text(bonsai.name ?? "无名盆景")
        // 替换成你的盆景展示视图
    }
}

额外提示

  • 优先用CoreData的关联关系,不仅代码简洁,还能利用CoreData的懒加载和数据一致性保障。
  • 使用filter时,确保bonsaiList是已获取的CoreData数据集合(比如@FetchRequest返回的结果)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:12:04