过滤数组以填充列表

Filtering an array to populate a list

我的数据模型有一个 ObservableObject,由以下结构组成:

struct Task: Codable, Hashable, Identifiable {
    var id = UUID()
    var title: String
    var completed = false
    var priority = 2
}

我的应用程序中待办事项列表的简单结构。

在负责构建按优先级显示的任务列表的视图中,我想通过每个元素的 priority 过滤此数据模型,并将其显示在列表中。

我还是 swift 的新手,但经过一些谷歌搜索(并专门尝试 this)后,我尝试了:

struct TasksView: View {
    
    @EnvironmentObject private var taskdata: DataModel
    @State var byPriotity: Int
        
    // this of course fails. 
    let filtered = taskdata.tasks.filter { priority in
        return taskdata.$tasks.priority = byPriotity        
    }
    
    var body: some View {
      //...
    }
}

我们的想法是将 filtered 传递给列表并显示在视图上。如果用户选择了不同的按钮,则重复,过滤新的优先级并显示。

如何根据“优先级”筛选 @EnvironmentObject private var taskdata: DataModel

谢谢。

我可能会在 DataModel 上实现此功能,而不是尝试在 View 上实现:

class DataModel : ObservableObject {
    @Published var tasks : [Task] = []
    
    func filteredTasks(byPriority priority: Int) -> [Task] {
        tasks.filter { [=10=].priority == priority }
    }
}

然后在 View 中,它的用法如下:

var body : some View {
  ForEach(taskdata.filteredTasks(byPriority: byPriority)) { task in 
    //...
  }
}

如果您真的想将它保留在 View 上,您可以这样做:

var filteredTasks: [Task] {
    taskdata.tasks.filter { [=12=].priority == byPriotity }
}