过滤数组以填充列表
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 }
}
我的数据模型有一个 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 }
}