在 SwiftUI 视图中处理 SwiftData 的增删改查
SwiftData 基础操作:增
在 SwiftUI 视图中处理 SwiftData 的增删改查,是构建数据驱动应用的核心。 首先,我们来看看如何添加新数据。 你可以使用 @Environment(\.modelContext) 属性包装器来获取模型上下文。 这是一个非常方便的方式! 🚀
例如,你可以创建一个按钮,点击后向数据库中添加一个新的 Item 对象。
swift
struct ContentView: View {
@Environment(\.modelContext) private var modelContext
var body: some View {
Button("添加新项目") {
let newItem = Item(timestamp: Date())
modelContext.insert(newItem)
}
}
}这行代码 modelContext.insert(newItem) 负责将你的新数据保存到持久化存储中。 真是太棒了!
SwiftData 基础操作:查
查询数据同样简单直观。 你可以使用 @Query 宏来声明一个查询,它会自动为你获取并更新数据。 这意味着你的视图会随着数据的变化而自动刷新。 真是省心! ✨
swift
struct ItemListView: View {
@Query var items: [Item]
var body: some View {
List {
ForEach(items) { item in
Text("项目时间: \(item.timestamp, formatter: itemFormatter)")
}
}
}
private let itemFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .medium
return formatter
}()
}@Query 宏可以接受参数,例如排序描述符或谓词,以实现更复杂的查询。 你可以轻松地筛选和排序你的数据。
SwiftData 基础操作:改
修改现有数据也非常直接。 你只需要获取到要修改的对象,然后直接更新它的属性即可。 SwiftData 会自动检测到这些变化并将其保存。 简直是魔法! 🪄
- 首先,通过
@Query获取到需要修改的数据。 - 然后,在你的视图中,找到你想要更新的特定
Item。 - 直接修改
Item对象的属性。
例如,你可以创建一个 EditItemView:
swift
struct EditItemView: View {
@Bindable var item: Item
var body: some View {
TextField("修改时间", value: $item.timestamp, formatter: DateFormatter())
}
}当 item 的属性被修改时,SwiftData 会自动处理数据的持久化。
SwiftData 基础操作:删
删除数据同样简单。 你可以通过 modelContext.delete() 方法来删除一个对象。
swift
struct ItemListView: View {
@Environment(\.modelContext) private var modelContext
@Query var items: [Item]
var body: some View {
List {
ForEach(items) { item in
Text("项目时间: \(item.timestamp, formatter: itemFormatter)")
}
.onDelete(perform: deleteItems)
}
}
private func deleteItems(offsets: IndexSet) {
for index in offsets {
modelContext.delete(items[index])
}
}
}onDelete 修饰符在 List 中非常有用,它允许用户通过滑动来删除行。 这种用户体验非常流畅! 💯 掌握这些增删改查的基本操作,你就能轻松构建强大的数据驱动型 SwiftUI 应用了。