@FetchRequest + 不区分大小写的排序 - SwiftUI 和 CoreData

@FetchRequest + case-insensitive sorting - SwiftUI & CoreData

我有一个按名称排序的项目列表。

我可以创建一个不区分大小写的获取请求,如下所示:

struct ContentView: View {
   
   var fetchRequest: FetchRequest<Item>
   
   init() {
      fetchRequest = FetchRequest<Item>(entity: Item.entity(), sortDescriptors: [NSSortDescriptor(key: "name", ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:)))
      ])
   }
   
   var body: some View {
      // content
   }
   
}

虽然我更愿意这样做:

struct ContentView: View {
   
   @FetchRequest(entity: Item.entity(), sortDescriptors: [
      NSSortDescriptor(keyPath: \Item.name, ascending: true) // <-- can I add a selector here?
   ]) var items: FetchedResults<Item>
   
   var body: some View {
      // content
   }
   
}

@FetchRequest 可以将选择器作为参数吗?

离开文档,NSSortDescriptor 似乎采用了一个名为 localizedCaseInsensitiveCompare 的参数,但我无法让它工作或在网上找到任何示例。

您可以将 NSString localizedStandardCompare 方法传递给选择器 属性:

NSSortDescriptor(key: "name", ascending: true, selector: #selector(NSString.localizedStandardCompare))