[SwiftUI 100天] Bookworm-part8 用 NSSortDescriptor排序

2020/4/24 23:22:54

本文主要是介绍[SwiftUI 100天] Bookworm-part8 用 NSSortDescriptor排序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

译自 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及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~





这篇关于[SwiftUI 100天] Bookworm-part8 用 NSSortDescriptor排序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程