36 lines
923 B
Swift
36 lines
923 B
Swift
import GRDB
|
|
import GRDBQuery
|
|
|
|
/// A player request can be used with the `@Query` property wrapper in order to
|
|
/// feed a view with a list of players.
|
|
///
|
|
/// For example:
|
|
///
|
|
/// struct MyView: View {
|
|
/// @Query(PlayerRequest(ordering: .byName)) private var players: [Player]
|
|
///
|
|
/// var body: some View {
|
|
/// List(players) { player in ... )
|
|
/// }
|
|
/// }
|
|
struct PlayerRequest: ValueObservationQueryable {
|
|
enum Ordering {
|
|
case byScore
|
|
case byName
|
|
}
|
|
|
|
static var defaultValue: [Player] { [] }
|
|
|
|
/// The ordering used by the player request.
|
|
var ordering: Ordering
|
|
|
|
func fetch(_ db: Database) throws -> [Player] {
|
|
switch ordering {
|
|
case .byScore:
|
|
return try Player.all().orderedByScore().fetchAll(db)
|
|
case .byName:
|
|
return try Player.all().orderedByName().fetchAll(db)
|
|
}
|
|
}
|
|
}
|