使用Realm按多个属性排序

cod*_*man 26 realm ios swift

如何使用多个属性订购我的Realm结果?

我首先使用这样的属性对它们进行排序:

allShows = Show.allObjects().sortedResultsUsingProperty("dateStart", ascending: true)
Run Code Online (Sandbox Code Playgroud)

但现在我也想通过另一个属性"timeStart"进行二次排序.我试过这样的:

allShows = Show.allObjects().sortedResultsUsingProperty("dateStart", ascending: true).sortedResultsUsingProperty("timeStart", ascending: true)
Run Code Online (Sandbox Code Playgroud)

这只会使结果仅由第二个属性排序.请帮忙.

小智 36

在RealmSwift中,我们可以编写多个这样的属性:

let sortProperties = [SortDescriptor(property: "dateStart", ascending: true), SortDescriptor(property: "timeStart", ascending: true)]
allShowsByDate = Realm().objects(MyObjectType).sorted(sortProperties)
Run Code Online (Sandbox Code Playgroud)

如果要使用更多属性,可以SortDescriptor()向数组添加值.

  • 在Swift 4中,您现在必须使用`.sorted(by:sortProperties)`。 (2认同)

cod*_*man 16

像这样想出来:

let sortProperties = [RLMSortDescriptor(property: "dateStart", ascending: true), RLMSortDescriptor(property: "timeStart", ascending: true)]
allShowsByDate = Show.allObjects().sortedResultsUsingDescriptors(sortProperties)
Run Code Online (Sandbox Code Playgroud)

  • 看起来他们将RLMSortDescriptor重构为SortDescriptor (2认同)

小智 7

更新了 Swift 4 语法

let sortProperties = [SortDescriptor(keyPath: "queue"), SortDescriptor(keyPath: "name")]
let dogList = realm.objects(Dog.self).sorted(by: sortProperties)
Run Code Online (Sandbox Code Playgroud)