
**import** SwiftUI
**import** CoreData
**struct** ContentView: View {
@Environment(\.managedObjectContext) **private** **var** viewContext
@FetchRequest(
sortDescriptors: [NSSortDescriptor(keyPath: \Item.timestamp, ascending: **true**)],
animation: .easeIn)
**private** **var** items: FetchedResults<Item>
**var** body: **some** View {
NavigationView {
List {
ForEach(items) { item **in**
NavigationLink {
Text("Item at \(item.timestamp!, formatter: itemFormatter)")
} label: {
Text(item.timestamp!, formatter: itemFormatter)
}
}
.onDelete(perform: deleteItems)
}
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
EditButton()
}
ToolbarItem {
Button(action: addItem) {
Label("Add Item", systemImage: "plus")
}
}
}
Text("Select an item")
}
}
**private** **func** addItem() {
withAnimation {
**let** newItem = Item(context: viewContext)
newItem.timestamp = Date()
**do** {
**try** viewContext.save()
} **catch** {
**let** nsError = error **as** NSError
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
}
}
}
**private** **func** deleteItems(offsets: IndexSet) {
withAnimation {
offsets.map { items[$0] }.forEach(viewContext.delete)
**do** {
**try** viewContext.save()
} **catch** {
**let** nsError = error **as** NSError
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
}
}
}
}
**private** **let** itemFormatter: DateFormatter = {
**let** formatter = DateFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .medium
**return** formatter
}()
**struct** ContentView_Previews: PreviewProvider {
**static** **var** previews: **some** View {
ContentView().environment(\.managedObjectContext, PersistenceController.preview.container.viewContext)
}
}