ForEach中的ForEach,获取数据

问题描述 投票:0回答:1

我现在正在构建一个视图,我尝试根据类别使用 ForEach 获取多个 DisclosureGroup。这是最简单的部分。我的问题是第二个数组,我想在其中获取具有所述类别的项目。

我是游戏新手,仍在学习,但我不知道该怎么做。

代码在这里:

    @Environment(\.modelContext) var context
    @Query private var category: [CategoryModel]
    @Query private var bonsai: [BonsaiModel]
    
    @State private var searchQuery = ""
    
    var body: some View {
        NavigationStack {
            VStack {
                
            }
            VStack(alignment: .center) {
                List {
                    Section {
                        // Query category to build DisclosureGroup
                        ForEach(category) { categories in // Loop through category
                            DisclosureGroup(categories.name) {
                                
                                ForEach(bonsai) { items in // Loop through bonsai, where bonsai.category = category
                                    Text(items.name)
                                        .bold()
                                    if let category = items.category {
                                        Text(category.name) // show category.title
                                            .foregroundColor(Color(.systemGray))
                                            .bold()
                                            
                                    } else {
                                        Text(" ")
                                            .padding(.top, 4)
                                    }
                                
                                
                                }
                                
                            }
                        }
                        
                        
                    }
                }
                .padding(.horizontal, 8)
                .padding(.top, 8)
                .listStyle(.inset)

我在其中放入了两个文本项,以查看我尝试在“bonsai”ForEach 中获取哪些数据。

这是一张图片,可以形象化我想要实现的目标:

现在您可以看到所有内容,但您可以看到应用作“过滤器”并且仅显示在其组中的类别。

我的猜测是,它将与compactMap或filter一起使用,但我不知道如何让它工作。

swiftui foreach swift-data
1个回答
0
投票

您可以在内部循环中添加一个过滤器,如下所示:

ForEach(category) { categories in // Loop through category
    ForEach(bonsai.filter { $0.category == category } )

有很多类似于

filter
的 Sequence 函数,您可以在 Apple 文档中了解。

© www.soinside.com 2019 - 2024. All rights reserved.