我试图在最高年龄的tableView
重新排序我的单元格,但问题是我有两张桌子。我使用Realm的数据库来存储数据,所以我的数据来自那里,而且我在某种程度上是有限的。在SQL中我会连接表来实现我想要的但我知道Realm是一个基于对象的数据库,因此查询中的连接概念不适用于它。
假设我有Class
Parent
和Child
@objcMembers class Parent: Object{
dynamic var name: String = ""
let children = List<Child>()
convenience init(name: String) {
self.init()
self.name = name
}
override static func primaryKey() -> String?{
return "name"
}
}
@objcMembers class Child: Object{
dynamic var name: String = ""
dynamic var age: Int = 0
dynamic var parent: Parent? = nil
convenience init(name: String, age: Int) {
self.init()
self.name = name
self.age = age
}
override static func primaryKey() -> String?{
return "name"
}
}
然后我有两个变量:
var parentsArray: Results<Parent>!
var childrenArray: Results<Child>!
像这样我从数据库中分配值:
parentsArray = realm.objects(Parent.self)
childrenArray = realm.objects(Child.self)
现在我要说约翰和彼得。彼得有两个孩子(蒂姆(年龄= 1)和汤姆(年龄= 3))。约翰有一个小孩托马斯(年龄= 2)。所以父母的命令应该是彼得和约翰
我已经尝试了一切,但找不到答案。
所以我的问题是,你应该如何按照给定的标准订购?
答案 0 :(得分:1)
您可以使用自定义排序功能对父级数组进行排序:
let sorted = parentsArray.sorted {
($0.children.sum(ofProperty: "age") as Int) > ($1.children.sum(ofProperty: "age") as Int)
}
因此,如果您需要按孩子的最大年龄排序,您只需使用其他功能:
$0.children.max(ofProperty: "age") as Int
作为旁注,dynamic var parent: Parent? = nil
表示您手动设置父级。相反,您应该使用LinkingObjects
- 链接到当前对象的对象列表:
let parents = LinkingObjects(fromType: Parent.self, property: "children")
这可能看起来不方便,因为它引入了多对多关系而不是一对多关系,但这样Realm将负责提供反向关系。