为了简单起见,假设我想创建一个简单的待办事项应用。我在我的xcdatamodeld中有一个名为Todo的实体,该实体具有属性 id ,
title 和
date ,以及以下SwiftUI视图(示例如图所示):
为了简化操作,我们假设希望创建一个简单的待办事项应用程序。 我们的xcdatamodeld文件中有一个名为Todo的实体,它拥有属性id
,title
和date
,并且以下是相应的SwiftUI视图(如下所示):
import SwiftUI
struct ContentView: View {
@Environment(\.managedObjectContext) var moc
@State private var date = Date()
@FetchRequest(
entity: Todo.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: \Todo.date, ascending: true)
]
) var todos: FetchedResults<Todo>
var dateFormatter: DateFormatter {
let formatter = DateFormatter()
formatter.dateStyle = .short
return formatter
}
var body: some View {
VStack {
List {
ForEach(todos, id: \.self) { todo in
HStack {
Text(todo.title ?? "")
Text("\(todo.date ?? Date(), formatter: self.dateFormatter)")
}
}
}
Form {
DatePicker(selection: $date, in: ...Date(), displayedComponents: .date) {
Text("Datum")
}
}
Button(action: {
let newTodo = Todo(context: self.moc)
newTodo.title = String(Int.random(in: 0 ..< 100))
newTodo.date = self.date
newTodo.id = UUID()
try? self.moc.save()
}, label: {
Text("Add new todo")
})
}
}
}
待办事项将在获取时按日期排序,并以此列表形式显示:
我想根据每个待办事项的日期分组,如下所示(模拟):
据我了解,这可以通过`init()`函数中的字典实现,但我无法想出任何有用的方法。是否有一种有效的数据分组方法?
id(todos.count)
。 - E.Coms}.values.map{$0}
更改为}.values.sorted() { $0[0].date! < $1[0].date! }
将使其与.sheet一起工作,错误也会消失。 - mallow