Skip to content

groue/GRDBQuery

Repository files navigation

GRDBQuery

Latest release: September 29, 2024 • version 0.10.1CHANGELOG

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!

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 by @davedelong, with a critical improvement contributed by @steipete, and enhancements inspired by conversations with @stephencelis. Many thanks to all of you!