我正在学习SwiftData,并希望使用它将我当前的应用程序转换为使用SwiftData.我正在try 构造一个SwiftDate查询,以便按日期对Items的数组进行排序.Items数组是主模型中的一个属性.我看到的所有示例都有一个Query,它使用第一级属性来排序(@Query(sort: \TaskItem.name) var tasks: [TaskItem]),但我正在寻找一个Query来排序在第二级(TaskItems.items.date).我在寻求帮助/方向.查看下面的模型

@Model
final class TaskItems {
    @Attribute(.unique) var name: String
    @Relationship(deleteRule: .cascade)
    var items: [Item]?
    
    init(name: String, items: [Item]? = nil) {
        self.name = name
        self.items = items
    }
}

@Model
final class Item {
    @Attribute(.unique) let id = UUID().uuidString
    var tag: String
    var date: Date
    
    init(tag: String, date: Date) {
        self.tag = tag
        self.date = date
    }
}

在我看来,我有主要的查询作为

@Query var taskItems: [TaskItems]

我试图显示Items,这是TaskItems的属性,按日期排序.

这是我try 的,我知道是不对的,不编译.

@Query(FetchDescriptor<Item>(sortBy: [SortDescriptor(\TaskItems.items.date, order: .forward)])) var items: [Item]

感谢任何指导/帮助

推荐答案

要用@Query解决这个问题,首先需要通过完全定义模型之间的关系来更新模型.

  • 在Item中添加对TaskItems的引用,该属性需要是可选的,因为另一端是可选的,谓词才能工作
var task: TaskItems?
  • 通过定义inverse属性来更新TaskItem中的关系
@Relationship(deleteRule: .cascade, inverse: \Item.task) 
var items: [Item]?
  • 将查询添加到子视图
@Query(filter: Predicate<Item>.false) private var items: [Item]

init(task: TaskItems) {
    let id = task.persistentModelID
    let fetchDescriptor = FetchDescriptor<Item>(predicate: #Predicate { $0.task?.persistentModelID == id},
                                                sortBy: [SortDescriptor(\.date, order: .forward)])
    _items = Query(fetchDescriptor)
 }

Swift相关问答推荐

为什么不能使用actor作为AsyncSequence中的状态机类型?

在列表项内的NavigationLink中的按钮无法正常工作

如何在Swift中获得与Python相同的HMAC—SHA512签名?

为什么第二项任务不在第一项任务完成之前开始?(并发队列)

SWIFT并发:合并Taskgroup和AsyncStream?

SwiftUI轨迹绘制怪异

为什么我不能在这个 Swift 间接枚举中返回 self ?

SwiftUI,如何更改具有多个按钮和一个布尔条件的一个按钮标签

从一个范围减go 多个范围

使用 WrappingHStack 文本溢出到新行

如果 Swift 无法分配内存会怎样?

为什么swiftui中的导航视图栏那么大?

AVPlayer 在 iOS 15.4 中寻求 completionHandler 返回 false

Xcode swift ui 错误KeyPathComparator仅在 macOS 12.0 或更高版本中可用

组合 flatMap 不会返回预期的上下文结果类型

在 SwiftUI 中,如何在 UIView 内或作为 UIView 使用 UIHostingController?

如何删除桥头而不出错?

Xcode 6 中的嵌入式内容包含 Swift 代码构建设置有什么作用?

<<错误类型>> 奇怪的错误

iOS:如何检测用户是否订阅了自动更新订阅