在 SwiftUI 中从数据模型中搜索数组
Posted
技术标签:
【中文标题】在 SwiftUI 中从数据模型中搜索数组【英文标题】:Search through Array from Data Model in SwiftUI 【发布时间】:2020-10-06 09:49:42 【问题描述】:另一个我无法解决的棘手 SwiftUI 问题!
我在一个视图中有 2 个列表,每个列表都从数据模型结构中读取。当在第一个列表中选择一行时,我将使用所选行的标题更新 @State
。
在我的第二个列表中,数据模型有一个数组,它可能与更新后的@State
的标题匹配,也可能不匹配。我正在尝试搜索数组以查看它是否与新选择的 @State
字符串匹配,并且仅在匹配时才显示该行,但我无法弄清楚如何在每个数组中搜索每一行。如何访问该数组以查看它是否与@State
匹配?
我没有包含 ApplicationsListRow
和 ProductListRow
的 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 + Combine:如何将数据分配给带有动画的模型