@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))
我有一个按名称排序的项目列表。
我可以创建一个不区分大小写的获取请求,如下所示:
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))