在 SwiftUI 中从数据模型中搜索数组
Search through Array from Data Model in SwiftUI
另一个棘手的 SwiftUI 问题我无法解决!
我在一个视图中有 2 个列表,每个列表都从一个数据模型结构中读取。当在第一个列表中选择一行时,我将更新 @State
和所选行的标题。
在我的第二个列表中,数据模型有一个数组,可能与更新后的标题匹配,也可能不匹配 @State
。我正在尝试搜索数组以查看它是否与新选择的 @State
字符串匹配,并且只在匹配时显示该行,但我无法弄清楚如何为每一行搜索每个数组。如何访问数组以查看它是否匹配 @State
?
我没有包含 2 行视图 ApplicationsListRow
和 ProductListRow
,因为它们是简单的 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
}
现在您拥有在其应用程序数组中具有匹配字符串的所有产品。
另一个棘手的 SwiftUI 问题我无法解决!
我在一个视图中有 2 个列表,每个列表都从一个数据模型结构中读取。当在第一个列表中选择一行时,我将更新 @State
和所选行的标题。
在我的第二个列表中,数据模型有一个数组,可能与更新后的标题匹配,也可能不匹配 @State
。我正在尝试搜索数组以查看它是否与新选择的 @State
字符串匹配,并且只在匹配时显示该行,但我无法弄清楚如何为每一行搜索每个数组。如何访问数组以查看它是否匹配 @State
?
我没有包含 2 行视图 ApplicationsListRow
和 ProductListRow
,因为它们是简单的 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
}
现在您拥有在其应用程序数组中具有匹配字符串的所有产品。