使用Realm Swift soring问题

时间:2018-01-25 04:01:25

标签: swift realm

以下是示例代码:

let outstandingStudentIDs = ["BGHH2", "AGHH1", "DFGH", "DFGHJ"]

let realmResult = realm.objects(Student.self).filter("studentID in %@", outstandingStudentIDs)

realmResult没有按明显的学生ID保持排序。

如何进行自定义排序并将对象类型保留在结果<Element: RealmCollectionValue>.中 如果将realmResult转换为Array进行排序,那么如何使用notificationToken观察结果更改将其返回到结果

1 个答案:

答案 0 :(得分:0)

您应该能够将sorted链接到该结果中。

https://realm.io/docs/swift/latest#sorting ***

let realmResult = realm.objects(Student.self).filter("studentID in %", outstandingStudentIDs).sorted(byProperty: "studentID")

<击>

长答案:

要进行所需的自定义排序,您需要使用sorted(by:)。不幸的是,这将返回一个数组而不是Results实例。

通常会懒惰地评估Results实例,除非您希望对其进行排序。在这种情况下,Realm将需要遍历整个数据集以确保它以正确的顺序返回对象。如果您提供自己的比较功能,Realm 必须假设您的代码是&#34;不安全&#34;并可能导致问题。

可能使Realm爆炸的例子:

let realm = try! Realm()
try! realm.write {
    _ = realm.create(Student.self, value: ["studentId": "1"])
    _ = realm.create(Student.self, value: ["studentId": "2"])
}
let results = realm.objects(Student.self).sorted(by: { (_, _) -> Bool in
    try! realm.write {
        realm.deleteAll()
    }
    return false
})
print(results)

这会打印一个友好的:

[[invalid object], [invalid object], [invalid object], [invalid object]]

简答:

很确定它无法完成,但我欢迎有人展示出一个不错的解决方案。