FetchRequest 数据排序

2023-10-20
#swiftui #SwiftUI 学习笔记

在 SwiftUI 中我们可以通过 @FetchRequest 的方式从 Core Data 获取保存的数据,但是默认的数据并不保证会被排序

   @FetchRequest(sortDescriptors: []) private var records: FetchedResults<Records>
   @FetchRequest(sortDescriptors: []) private var folders: FetchedResults<Folders>

所以最好的的方式,是我们指定一个默认的排序字段以及排序的方式。借由 SortDescriptor 我们可以实现这个目的

  @FetchRequest(sortDescriptors: [SortDescriptor(\.createAt)]) private var records: FetchedResults<Records>

上面的代码则是根据 createAt 进行排序

      /// - Parameters:
      ///   - keyPath: The key path to the field to use for the comparison.
      ///   - order: The initial order to use for comparison.
      public init(_ keyPath: KeyPath<Compared, Date?>, order: SortOrder = .forward) where Compared : NSObject

通过源码不能注意到默认的排序是 .forward 除此之外还有 .reverse

      /// The ordering where if compare(a, b) == .orderedAscending,
      /// a is placed before b.
      case forward
  
      /// The ordering where if compare(a, b) == .orderedAscending,
      /// a is placed after b.
      case reverse

其中 forward 代表着升序排列,而 reverse 代表着降序排列

最后不难注意到 @FetchRequest(sortDescriptors: []) 其中 sortDescriptors 是个数组,也就意味着我们可以传入多个字段进行排序

  @FetchRequest(sortDescriptors: [SortDescriptor(\.createAt),
                                 SortDescriptor(\.id)]) 
  private var records: FetchedResults<Records>