在 SwiftUI 中从数据模型中搜索数组

Search through Array from Data Model in SwiftUI

另一个棘手的 SwiftUI 问题我无法解决!

我在一个视图中有 2 个列表,每个列表都从一个数据模型结构中读取。当在第一个列表中选择一行时,我将更新 @State 和所选行的标题。

在我的第二个列表中,数据模型有一个数组,可能与更新后的标题匹配,也可能不匹配 @State。我正在尝试搜索数组以查看它是否与新选择的 @State 字符串匹配,并且只在匹配时显示该行,但我无法弄清楚如何为每一行搜索每个数组。如何访问数组以查看它是否匹配 @State?

我没有包含 2 行视图 ApplicationsListRowProductListRow,因为它们是简单的 HStack,仅从数据模型获取标题。

这是我对列表 2 的看法:

struct ProductListTabApplications: View {
    
    @State private var selectedOption = "Food"
    
    var applications: [ApplicationModel] = applicationData
    var products: [ProductModel] = productData
    
    var body: some View {
        HStack {
            List(){
                ForEach(applications) { item in
                    Button(action: {
                        self.selectedOption = item.title
                    }) {
                        ApplicationsListRow(application: item)
                    }
                }
            }
            List{
                ForEach(products) { item in
                    NavigationLink(destination: ProductTabView(product: item)) {
                        ProductListRow(product: item)
                    }
                }
            }
        }
    }
}

我已经尝试在第二个列表中使用 for 循环和 if 语句,但我无法找到一种方法来访问数组以查看它是否存在。这是我尝试过的示例之一:

ForEach(products) { item in
     ForEach(item) { application in
         if item.application[application] == selectedOption {
            // list items
          }
      }
 }

简化数据模型:

struct ProductModel: Identifiable {
var id = UUID()
var title: String
var application: [String]  
}

简化结构:

let productData: [ProductModel] = [
    ProductModel(
        title: "product1",
        application: ["Food","Metals","Beverage"]
    ),
    ProductModel(
        title: "product2",
        application: ["Beverage"]
    ),
]

您可以使用 filter 在列表中查找匹配项。

示例:

let matchedItems = products.filter {
    product in
    let list = product.application
    for item in list {
        if item == selectedOption {
            return true
        }
    }
    return false
}

现在您拥有在其应用程序数组中具有匹配字符串的所有产品。