视图中具有动态属性的SwiftData查询

cl25kdpy  于 2023-06-28  发布在  Swift
关注(0)|答案(1)|浏览(160)

我试图弄清楚如何创建一个SwiftUI视图,使用一个包含传入视图的变量的查询来显示来自SwiftData的数据。我猜我将无法使用@Query语法,但是有没有人想出一个可行的方法来做这样的事情?
我是否需要放弃@Query,只创建一个视图模型来示例化它自己的ModelContainer和ModelContext?
这段代码显然没有编译,因为@Query引用了startDate和endDate变量,但这正是我想要的。

struct MyView: View {
    @Environment(\.modelContext) var modelContext

    @Query(FetchDescriptor<Measurement>(predicate: #Predicate<Measurement> {
    $0.date >= startDate && $0.date <= endDate }, sortBy: [SortDescriptor(\Measurement.date)])) var measurements: [Measurement]

    let startDate: Date = Date.distantPast
    let endDate: Date = Date.distantFuture

    var body: some View {
        Text("Help")
    }
}
kknvjkwl

kknvjkwl1#

您不能有一个动态查询(目前还没有),但是一个解决方案是将日期(或完整的 predicate )注入到视图中,并以这种方式创建查询。

@Query(FetchDescriptor<Measurement> var measurements: [Measurement]

init(startDate: Date, endDate: Date) {
    let predicate = #Predicate<Measurement> {
        $0.date >= startDate && $0.date <= endDate
    }

    _measurements = Query(filter: predicate, sort: \.date)
}

相关问题