Realm Swift-使用列表属性(不止一个)过滤对象

时间:2019-07-02 05:52:34

标签: ios swift realm

如何使用子对象的多个属性来过滤对象。因此,“找到所有年龄大于10岁的男孩的父母”

class Parent: Object {

   @objc dynamic var name: String?

   let children = List<Child>()
}
class Child: Object {

   @objc dynamic var name: String?
   @objc dynamic var gender: String?
   @objc dynamic var age: Int?

}
    let filtered = realm.objects(Parent.self).filter("ANY (children.name == %@ && children.gender == %@)", "some name", "male")

这似乎不是有效的查询。

还是我必须做这样的事情,奇怪的是似乎也给出了错误的结果-但是我可能需要对此做更多的测试。

let filtered = realm.objects(Parent.self).filter("ANY children.name == %@", "some name").filter("ANY children.gender == %@", "male")

最后,看来首先让所有符合条件的孩子都可以工作,然后找到这些孩子的父母工作可靠。

let matchingChildren = realm.objects(Child.self).filter("name == %@ && gender == %@)", "some name", "male")

let parentsOfMatchingChildren = realm.objects(Parent.self).filter("ANY children IN %@", matchingChildren)

1 个答案:

答案 0 :(得分:1)

我认为您不能将ANY与这样复杂的括号一起使用。您需要分割ANY

ANY children.name == %@ && ANY children.age > %@

此外,%@用于对象(例如字符串)。对于年龄这样的整数,您需要使用%d

ANY children.name == %@ && ANY children.age > %d

或者,您也可以使用SUBQUERY

SUBQUERY(children, $child, $child.name == %@).@count > 0 && SUBQUERY(children, $child, $child.age >%d).@count > 0