在Realm中查询匹配的数组属性

时间:2017-06-29 16:05:13

标签: swift realm

使用Realm Swift考虑以下内容:

class Shelf : Object {
    let products = List<Product>()
}

class Product : Object {
    let string: String = ""
    let Shelves = LinkingObjects(fromType: Shelf.self, property: "products")
}

现在问题是,是否可以执行如下查询:

&#34;什么是完全符合特定产品清单的所有货架?&#34; (不多也不少)。

我找不到比较数组的方法。

编辑: 如果我尝试这样做:

let results = realm.objects(Shelf.self).filter("%@ == products",products)

我收到错误:

Invalid predicate: 
Key paths that include an array property must use aggregate operations

谢谢。

1 个答案:

答案 0 :(得分:1)

由于Object继承自Equatable,符合Object这一事实,默认情}。如果NSObject的元素符合Equatable协议,则List本身也符合该协议。

因此,您应该能够使用Equatable函数比较List个实例,还可以直接比较List<Product>个对象。

但是,请注意==会覆盖Shelf功能,请参阅Realm object's Equatable is implementation

如果您想进行自定义比较,可以自行覆盖Realm功能。

编辑:我不认为可以使用==的过滤方法完成此操作。但是,如果您不介意将数组作为结果而不是==集合,则以下方法可以为您提供帮助。

Realm

以上代码已经在Playground中使用类似的类进行了测试,并返回了正确的结果。