使用 List 属性 的计数对 Realm 对象进行排序
Sort Realm objects with the count of List property
我有两个 Realm 数据模型 类 像这样:
class TaskList: Object {
dynamic var name = ""
dynamic var createdAt = NSDate()
let tasks = List<Task>()
}
并且:
class Task: Object {
dynamic var name = ""
dynamic var createdAt = NSDate()
dynamic var notes = ""
dynamic var isCompleted = false
}
现在我需要查询 TaskList 并根据每个任务中的任务数对它们进行排序。我尝试使用类似这样的东西,但它使应用程序崩溃,因为它不受支持:
realm.objects(TaskList).sorted("tasks.count")
像这样:
realm.objects(TaskList).sort { [=10=].tasks.count < .tasks.count }
编辑:不知道 Realm,这仅在 objects
returns 一个 CollectionType
和 List
有一个 count
属性.
另一种解决方法是:
在TaskList
中引入taskCount
属性,并使taskCount
和tasks.count
始终同步。
class TaskList: Object {
dynamic var name = ""
dynamic var createdAt = NSDate()
let tasks = List<Task>()
dynamic var taskCount = 0
}
然后,您可以使用
realm.objects(TaskList).sorted("taskCount")
由于 Realm 目前不支持对关键路径进行排序。
如果您想自动同步 taskCount
和 tasks.count
,您可以按照以下步骤操作:
(不要直接使用tasks.append()
,而是使用addTask()
方法。)
class TaskList: Object {
dynamic var name = ""
dynamic var createdAt = NSDate()
private let tasks = List<Task>()
dynamic var taskCount = 0
func addTask(task: Task) {
func add() {
tasks.append(task)
taskCount = tasks.count
}
if let realm = realm where !realm.inWriteTransaction {
try! realm.write{
add()
}
} else {
add()
}
}
}
我有两个 Realm 数据模型 类 像这样:
class TaskList: Object {
dynamic var name = ""
dynamic var createdAt = NSDate()
let tasks = List<Task>()
}
并且:
class Task: Object {
dynamic var name = ""
dynamic var createdAt = NSDate()
dynamic var notes = ""
dynamic var isCompleted = false
}
现在我需要查询 TaskList 并根据每个任务中的任务数对它们进行排序。我尝试使用类似这样的东西,但它使应用程序崩溃,因为它不受支持:
realm.objects(TaskList).sorted("tasks.count")
像这样:
realm.objects(TaskList).sort { [=10=].tasks.count < .tasks.count }
编辑:不知道 Realm,这仅在 objects
returns 一个 CollectionType
和 List
有一个 count
属性.
另一种解决方法是:
在TaskList
中引入taskCount
属性,并使taskCount
和tasks.count
始终同步。
class TaskList: Object {
dynamic var name = ""
dynamic var createdAt = NSDate()
let tasks = List<Task>()
dynamic var taskCount = 0
}
然后,您可以使用
realm.objects(TaskList).sorted("taskCount")
由于 Realm 目前不支持对关键路径进行排序。
如果您想自动同步 taskCount
和 tasks.count
,您可以按照以下步骤操作:
(不要直接使用tasks.append()
,而是使用addTask()
方法。)
class TaskList: Object {
dynamic var name = ""
dynamic var createdAt = NSDate()
private let tasks = List<Task>()
dynamic var taskCount = 0
func addTask(task: Task) {
func add() {
tasks.append(task)
taskCount = tasks.count
}
if let realm = realm where !realm.inWriteTransaction {
try! realm.write{
add()
}
} else {
add()
}
}
}