Latest release: September 29, 2024 • version 0.10.1 • CHANGELOG
Requirements: iOS 14.0+ / macOS 11+ / tvOS 14.0+ / watchOS 7.0+ • Swift 6+ / Xcode 16+
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:/// 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 buildingObservableObject
models from the SwiftUI environment:/// 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!
Learn how to use @Query
and @EnvironmentStateObject
in the Documentation.
Check out the GRDBQuery demo apps, and the GRDB demo apps for various examples.
🙌 @Query
was vastly inspired from Core Data and SwiftUI by @davedelong, with a critical improvement contributed by @steipete, and enhancements inspired by conversations with @stephencelis. Many thanks to all of you!