9-SwiftData Dynamically Query Filter
According to Dynamically filtering our SwiftData query,
Predicate still needs the value to be directly inlined as a constant!
These two not work!
1
2
3
4
5
6
7
8
9
10
enum DayPhase {
case morning
case night
static var morningRawValue: String {
DayPhase.morning.rawValue
}
static let morningRawValue = "morning"
}
1
@Query(filter: #Predicate<FoodLog> { ($0.occurredAt >= yesterdayStart) && ($0.occurredAt < todayStart) && ($0.dayPhase.rawValue == DayPhase.nightRawValue) }) private var yesterdayNightAfterLog2: [FoodLog]
But it works inside init
:
1
2
3
4
5
6
7
8
9
@Query private var yesterdayNightAfterLog: [FoodLog]
init() {
let yesterdayStart = Calendar.current.startOfDay(for: Calendar.current.date(byAdding: .day, value: -1, to: .now)!)
let todayStart = Calendar.current.startOfDay(for: .now)
let nightRawValue = DayPhase.night.rawValue
_yesterdayNightAfterLog = Query(filter: #Predicate<FoodLog> { ($0.occurredAt >= yesterdayStart) && ($0.occurredAt < todayStart) && ($0.dayPhase.rawValue == nightRawValue) })
}
This post is licensed under CC BY 4.0 by the author.