Swift 快速过滤列表
基本上,我有一个名为Swift 快速过滤列表,swift,list,filter,swiftui,Swift,List,Filter,Swiftui,基本上,我有一个名为Treatment的可解码结构,它有两个参数:title和category。我想创建一个列表,其中categoryName=treatment.category。这样的话,只有一些治疗方法会被列入清单 struct HomeSecondLevel: View { let categoryName: String @ObservedObject var treatmentsManager = TreatmentsManager() var body: som
Treatment
的可解码结构,它有两个参数:title和category。我想创建一个列表,其中categoryName=treatment.category
。这样的话,只有一些治疗方法会被列入清单
struct HomeSecondLevel: View {
let categoryName: String
@ObservedObject var treatmentsManager = TreatmentsManager()
var body: some View {
NavigationView {
List(treatmentsManager.treatments) { treatment in
Text(treatment.title)
}}}}
我尝试在列表视图的正下方添加一个“if语句”(
if categoryName=treatment.category
),试图过滤列表,但没有起作用。我通过将过滤后的数据传递到列表
,并在过滤后的处理
中保持静音,解决了这个问题
在您的问题中,如果categoryName=treatment.category
无效,因为您编写了=
而不是=
。如果修复的话,这会起作用,但它会显示处理方法与类别不匹配的空白/行。为了避免空格,这就是为什么首先过滤这里的数据
以下是一个适用于您的示例:
struct ContentView: View {
var body: some View {
HomeSecondLevel(categoryName: "e")
}
}
struct HomeSecondLevel: View {
@ObservedObject var treatmentsManager = TreatmentsManager()
let categoryName: String
var filteredTreatments: [Treatment] {
treatmentsManager.treatments.filter { $0.category == categoryName }
}
var body: some View {
NavigationView {
List(filteredTreatments) { treatment in
Text(treatment.title)
}
}
}
}
class TreatmentsManager: ObservableObject {
@Published var treatments: [Treatment] = [
Treatment(title: "1", category: "o"),
Treatment(title: "2", category: "e"),
Treatment(title: "3", category: "o"),
Treatment(title: "4", category: "e"),
Treatment(title: "5", category: "o"),
Treatment(title: "6", category: "e"),
]
}
struct Treatment: Identifiable {
let id = UUID()
let title: String
let category: String
}