.package(url: "https://github.com/mesqueeb/SwiftDataSugar", from: "0.1.0")
一个实用工具集合,旨在简化在 SwiftUI 环境中使用 SwiftData 的操作。
DbCollection
是一个 Actor,专为在后台线程对 SwiftData 进行 CRUD 操作而设计(避免了阻止 UI 响应的陷阱)。DbQuery
是一个 SwiftUI 视图,它使用 @Query
,但使其更容易与动态谓词/排序方式一起使用。MigrationStep
是一个协议,用于组织你的迁移逻辑,以便进行迁移测试。initModelContainer
封装了 ModelContainer
的初始化,以便更轻松地编写迁移单元测试。渲染后的文档可以在这里找到:swiftpackageindex.com/mesqueeb/SwiftDataSugar/documentation
一个关于如何在所有 Apple 平台上通过 SwiftData 实现 CRUD 的参考示例。
此概念验证的特点
@ModelActor
宏)。@Query
宏)。ModelActor
的 actor
已被设置为具有类似 CRUD 的方法,可以轻松地将数据写入模型。DbCollection
。@MainActor
上实例化 DbCollection
,以防止在 SwiftUI 中写入数据时没有反应的问题。(请参阅 A New Issue: The View Does Not Refresh After Data Update 中的详细解释,我已向 Fatbobman 报告此问题,并促使他撰写了一篇文章)。DbCollection
可以用于多个模型。DbCollection
的用法展示了一个 Todo
模型。// example instantiating multiple collections in the `@main` swift file
@MainActor public let dbTodos = DbCollection<TodoItem>(modelContainer: modelContainer)
@MainActor public let dbUsers = DbCollection<User>(modelContainer: modelContainer)
@Query
可用于需要查询数据而没有动态要求的简单视图。@Query
的用法被封装在一个名为 DbQuery
的新视图中,你可以在其中传递动态 *predicate* 和 *sortBy* 实例来查询数据。DbQuery
的用法展示了一个可以动态过滤和排序的列表。DbQuery(predicate: activePredicate, sortBy: activeSort) { items in
ForEach(items, id: \.id) { item in
TodoListItemView(item: item)
.id(item.id) // Use ID for List reordering and animations
}
}
}