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
}