我有一个ObservableObject
与我的数据模型,由以下结构体组成:
struct Task: Codable, Hashable, Identifiable {
var id = UUID()
var title: String
var completed = false
var priority = 2
}
一个简单的结构体,在我的应用程序中的待办事项列表。
在负责构建按优先级显示的任务列表的视图中,我希望通过每个元素的priority
过滤该数据模型,并将其显示在列表中。
我对swift还是个新手,但在谷歌上搜索了一下(并特别尝试了一下)之后,我尝试了:
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 { $0.priority == priority }
}
}
然后在View
中,可以这样使用:
var body : some View {
ForEach(taskdata.filteredTasks(byPriority: byPriority)) { task in
//...
}
}
如果你真的想把它放在View
上,你可以这样做:
var filteredTasks: [Task] {
taskdata.tasks.filter { $0.priority == byPriotity }
}