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.