SwiftData 和 @Query
的轻量级替代品。
这个库的动机和设计源于 Point-Free 上的许多剧集,这是一个由 Brandon Williams 和 Stephen Celis 主持的视频系列,探索 Swift 语言中的高级编程主题。 为了支持这个库的持续开发,请立即订阅。
SharingGRDB 是 SwiftData 和 @Query
宏的轻量级替代品,可以部署到 iOS 13 世代的目标平台。
SharingGRDB | SwiftData |
---|---|
@SharedReader(
.fetchAll(
sql: "SELECT * FROM items"
)
)
var items: [Item]
|
@Query
var items: [Item]
|
以上两个示例都从外部数据存储中获取项目,并且都由 SwiftUI 自动观察,以便在外部数据更改时重新计算视图,但 SharingGRDB 直接由 SQLite 使用 Sharing 和 GRDB 驱动,并且可以从 UIKit、@Observable
模型等中使用。
注意:不需要将查询编写为原始 SQL 字符串,也可以使用查询构建器。 有关 SharingGRDB 查询功能的更多信息,请参阅获取模型数据。
在 SharingGRDB 的属性包装器可以从 SQLite 获取数据之前,您需要在运行时提供它应该使用的默认数据库。 这通常在您应用程序生命周期的早期完成,例如 SwiftUI 中的应用程序入口点,并且类似于在 SwiftData 中配置模型存储
SharingGRDB | SwiftData |
---|---|
@main
struct MyApp: App {
init() {
prepareDependencies {
let db = try! DatabaseQueue(
// Create/migrate a database
// connection
)
$0.defaultDatabase = db
}
}
// ...
}
|
@main
struct MyApp: App {
let container = {
// Create/configure a container
try! ModelContainer(/* ... */)
}()
var body: some Scene {
WindowGroup {
ContentView()
.modelContainer(container)
}
}
}
|
注意:有关准备 SQLite 数据库的更多信息,请参阅准备 SQLite 数据库。
此 defaultDatabase
连接由 SharingGRDB 的策略隐式使用,例如 fetchAll
@SharedReader(.fetchAll(sql: "SELECT * FROM items"))
var items: [Item]
您可以在整个应用程序中访问此数据库,方式类似于通过属性包装器访问模型上下文
SharingGRDB | SwiftData |
---|---|
@Dependency(\.defaultDatabase)
var database
var newItem = Item(/* ... */)
try database.write { db in
try newItem.insert(db)
}
|
@Environment(\.modelContext)
var modelContext
let newItem = Item(/* ... */)
modelContext.insert(newItem)
try modelContext.save()
|
注意:有关 SharingGRDB 如何与 SwiftData 进行比较的更多信息,请参阅与 SwiftData 的比较。
这就是您开始使用 SharingGRDB 所需要知道的全部内容,但还有更多内容需要学习。 阅读下面的文章,了解如何最好地利用这个库
SQLite 是软件历史上最成熟和广泛分布的软件之一。 掌握 SQLite 知识对于任何应用程序开发人员来说都是一项很棒的技能,并且这个库不想对您隐瞒它。 因此,我们认为为了最好地运用这个库,您应该熟悉 SQLite 的基础知识,包括模式设计和规范化、SQL 查询(包括连接和聚合)以及性能(包括索引)。
凭借一些基本知识,您可以将此库应用于您的数据库模式,以便查询数据并在数据库中的数据更改时保持视图最新。 您可以使用 GRDB 的 query builder API 来查询您的数据库,或者您可以使用原始 SQL 查询,以及 SQL 提供的所有强大功能。
这个仓库附带大量示例,演示如何使用 Sharing 解决常见和复杂的问题。 查看此目录以查看所有示例,包括
案例研究:许多案例研究演示了库的内置功能。
SyncUps:我们还使用现代最佳实践重建了 Apple 的 Scrumdinger 演示应用程序,用于 SwiftUI 开发,包括使用此库来查询和持久化使用 SQLite 的状态。
Reminders:Apple 的 Reminders 应用程序的重建版本,它使用 SQLite 数据库来建模提醒、列表和标签。 它具有许多高级查询,例如搜索和统计聚合。
此处提供了发布版本和 main
的文档
您可以通过将 SharingGRDB 作为包添加到您的项目中,将其添加到 Xcode 项目中。
如果您想在 SwiftPM 项目中使用 SharingGRDB,只需将其添加到您的 Package.swift
dependencies: [
.package(url: "https://github.com/pointfreeco/sharing-grdb", from: "0.1.0")
]
然后将产品添加到任何需要访问该库的目标
.product(name: "SharingGRDB", package: "sharing-grdb"),
如果您想讨论这个库或对如何使用它来解决特定问题有疑问,您可以在以下几个地方与 Point-Free 爱好者进行讨论
对于长篇讨论,我们推荐此仓库的讨论选项卡。
对于非正式聊天,我们推荐 Point-Free 社区 Slack。
此库在 MIT 许可下发布。 有关详细信息,请参阅 LICENSE。