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

Posted

技术标签:

【中文标题】在 SwiftUI 中从数据模型中搜索数组【英文标题】:Search through Array from Data Model in SwiftUI 【发布时间】:2020-10-06 09:49:42 【问题描述】:

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

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

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

我没有包含 ApplicationsListRowProductListRow 的 2 行视图,因为它们是简单的 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"]
    ),
]

【问题讨论】:

【参考方案1】:

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

示例:

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

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

【讨论】:

以上是关于在 SwiftUI 中从数据模型中搜索数组的主要内容,如果未能解决你的问题,请参考以下文章

将数据从模型传递到 SwiftUI 中的视图

SwiftUI + Combine:如何将数据分配给带有动画的模型

编写 SwiftUI 模型以从带有数组的 JSON 文件中读取

SwiftUI - 列出嵌套数组中的元素

SwiftUI 通用数组模型

如何在 Qt 中从 3d 点数组中绘制和保存 3D 模型?