译自 www.hackingwithswift.com/books/ios-s…
更多内容,欢迎关注公众号 「Swift花园」
喜欢文章?不如来个 🔺💛➕三连?关注专栏,关注我 🚀🚀🚀
用 NSSortDescriptor 排序请求结果
当你使用 SwiftUI 的@FetchRequest属性包装器从 Core Data 中提取对象时,你需要指定你希望的数据排序方式 —— 它们是应该以某个字段的字母表顺序排序呢?还是以某个数字的大小来排序?如果我们指定空的数组,对于少量的对象可能还能工作,但是一旦超过 20 个对象,对于用户来说就会恼人。
在这个项目中,我们有很多字段,可能有助于排序:图书的标题,作者,评级都是可能的好选项,不过我猜测标题应该是最常见的选项。
Fetch 请求排序是采用一个叫NSSortDescriptor的新类,我们通过两个值来创建它们:我们要排序的属性,要升序还是降序排序。举个例子,我们可以像下面这样,按标题的字母顺序升序排列:
@FetchRequest(entity: Book.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Book.title, ascending: true)]) var books: FetchedResults<Book>你可以指定超过一个排序描述符,它们会以你提供它们的顺序逐个应用。举个例子,如果用户添加了一本由 Pete Hamill 写的叫 “Forever” 的书,然后又添加了一本由 Judy Blume 写的叫 “Forever” 的书 —— 两本书完全不一样,只是凑巧书名一样—— 那么指定第二个排序描述符就变得很有用。
因此,我们可以要求书名按升序排序,然后再加上作者按升序排序,像这样:
@FetchRequest(entity: Book.entity(), sortDescriptors: [
NSSortDescriptor(keyPath: \Book.title, ascending: true),
NSSortDescriptor(keyPath: \Book.author, ascending: true)
]) var books: FetchedResults<Book>添加第二或者第三个排序字段对于性能的影响微乎其微,除非你有大量有相似值的数据。对于我们的图书数据,几乎每本书都有一个唯一的书名,因此指定第二个排序字段几乎不影响性能。
我的公众号 这里有Swift及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~
