The SwiftUI companion for GRDB
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+
š 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:
/// 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:
/// 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!