簡體   English   中英

在 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
}

現在您擁有所有在其應用程序數組中具有匹配字符串的產品。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM