返回
SwiftUI 100天 Bookworm-part9 删除 Core Data 对象
IOS
2024-01-29 17:44:31
[1] 删除书籍
要删除书籍,我们将在 ContentView
中使用 onDelete(perform:)
修饰符。这个修饰符接受一个闭包作为参数,该闭包将要被删除的书籍作为参数,我们可以使用此闭包来从 Core Data 中删除书籍。
// ContentView.swift
import SwiftUI
import CoreData
struct ContentView: View {
@Environment(\.managedObjectContext) private var context
@FetchRequest(
entity: Book.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: \Book.title, ascending: true)
]
) private var books: FetchedResults<Book>
var body: some View {
List {
ForEach(books, id: \.self) { book in
HStack {
Text(book.title ?? "Unknown")
Spacer()
Button(role: .destructive) {
context.delete(book)
try? context.save()
} label: {
Image(systemName: "trash")
}
}
}
.onDelete(perform: deleteBooks)
}
}
private func deleteBooks(offsets: IndexSet) {
withAnimation {
offsets.map { books[$0] }.forEach(context.delete)
try? context.save()
}
}
}
[2] 编辑书籍
要编辑书籍,我们将在 ContentView
中使用 NavigationLink
和 BookDetailView
。NavigationLink
将我们带到 BookDetailView
,在那里我们可以编辑书籍的标题和作者。
// ContentView.swift
import SwiftUI
import CoreData
struct ContentView: View {
@Environment(\.managedObjectContext) private var context
@FetchRequest(
entity: Book.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: \Book.title, ascending: true)
]
) private var books: FetchedResults<Book>
var body: some View {
List {
ForEach(books, id: \.self) { book in
NavigationLink {
BookDetailView(book: book)
} label: {
Text(book.title ?? "Unknown")
}
}
}
}
}
// BookDetailView.swift
import SwiftUI
import CoreData
struct BookDetailView: View {
@Environment(\.managedObjectContext) private var context
@ObservedObject var book: Book
var body: some View {
Form {
TextField("Title", text: $book.title)
TextField("Author", text: $book.author)
Button("Save") {
try? context.save()
}
}
}
}
通过添加这些修改,我们就可以实现一个功能齐全的书架应用程序,允许用户添加、删除和编辑书籍。