Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/groue/grdbquery
The SwiftUI companion for GRDB
https://github.com/groue/grdbquery
database database-observation grdb sqlite swiftui
Last synced: 13 days ago
JSON representation
The SwiftUI companion for GRDB
- Host: GitHub
- URL: https://github.com/groue/grdbquery
- Owner: groue
- License: mit
- Created: 2021-11-25T13:00:36.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-01-17T07:24:59.000Z (10 months ago)
- Last Synced: 2024-05-02T00:54:04.085Z (7 months ago)
- Topics: database, database-observation, grdb, sqlite, swiftui
- Language: Swift
- Homepage:
- Size: 1.94 MB
- Stars: 189
- Watchers: 5
- Forks: 12
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
Awesome Lists containing this project
README
# GRDBQuery
**Latest release**: September 29, 2024 • [version 0.10.1](https://github.com/groue/GRDBQuery/tree/0.10.1) • [CHANGELOG](CHANGELOG.md)
**Requirements**: iOS 14.0+ / macOS 11+ / tvOS 14.0+ / watchOS 7.0+ • Swift 6+ / Xcode 16+
📖 **[Documentation]**
---
GRDBQuery helps SwiftUI applications access a local SQLite database through [GRDB] and the SwiftUI environment.
It comes in two flavors:
- The `@Query` property wrapper allows SwiftUI views to directly read and observe the database:
```swift
/// Displays an always up-to-date list of database players.
struct PlayerList: View {
@Query(PlayersRequest()) var players: [Player]
var body: some View {
List(players) { player in Text(player.name) }
}
}
```- The `@EnvironmentStateObject` property wrapper helps building `ObservableObject` models from the SwiftUI environment:
```swift
/// Displays an always up-to-date list of database players.
struct PlayerList: View {
@EnvironmentStateObject var model: PlayerListModel = []
init() {
_model = EnvironmentStateObject { env in
PlayerListModel(databaseContext: env.databaseContext)
}
}
var body: some View {
List(model.players) { player in Text(player.name) }
}
}
```Both techniques can be used in a single application, so that developers can run quick experiments, build versatile previews, and also apply strict patterns and conventions. Pick `@Query`, or `@EnvironmentStateObject`, depending on your needs!
## Documentation
Learn how to use `@Query` and `@EnvironmentStateObject` in the **[Documentation]**.
Check out the **[GRDBQuery demo apps]**, and the **[GRDB demo apps]** for various examples.
## Thanks
🙌 `@Query` was vastly inspired from [Core Data and SwiftUI](https://davedelong.com/blog/2021/04/03/core-data-and-swiftui/) by [@davedelong](https://github.com/davedelong), with [a critical improvement](https://github.com/groue/GRDB.swift/pull/955) contributed by [@steipete](https://github.com/steipete), and enhancements inspired by conversations with [@stephencelis](https://github.com/stephencelis). Many thanks to all of you!
[GRDB]: http://github.com/groue/GRDB.swift
[GRDB demo apps]: https://github.com/groue/GRDB.swift/tree/master/Documentation/DemoApps
[Documentation]: https://swiftpackageindex.com/groue/GRDBQuery/documentation
[GRDBQuery demo apps]: Documentation