Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

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