Ios 复合筛选器数组的领域查询
我想查询具有多个筛选器的所有产品,例如: 所有产品具有:Ios 复合筛选器数组的领域查询,ios,swift,realm,Ios,Swift,Realm,我想查询具有多个筛选器的所有产品,例如: 所有产品具有:[(名称:“饼干”,品牌:“x品牌”),(名称:“水”,品牌:“y品牌”)] 如果我只有一个过滤器,例如(名称:“cookies”,品牌:“brand x”)那么答案就会很清楚:名称==\(tuple.name)和品牌==\(tuple.brand) 如果我有多个元组,但只有一个属性,那么也很清楚: return "name IN {\(["cookies", "water"].joined(separator: ","))}" 但是如何
[(名称:“饼干”,品牌:“x品牌”),(名称:“水”,品牌:“y品牌”)]
如果我只有一个过滤器,例如(名称:“cookies”,品牌:“brand x”)
那么答案就会很清楚:名称==\(tuple.name)和品牌==\(tuple.brand)
如果我有多个元组,但只有一个属性,那么也很清楚:
return "name IN {\(["cookies", "water"].joined(separator: ","))}"
但是如何为元组数组编写过滤器呢?一个想法是使用前面的查询name==\(tuple.name)和brand==\(tuple.brand)
将每个结果作为单个Results
获取,并用它构建一个数组,但我需要的是Results
中的最终结果,而不是数组
也可能是这样,但我认为这是不可能的
return "name::brand IN {\(["cookies::brand x", "water::brand y"].joined(separator: ","))}"
似乎要将谓词与以下内容组合在一起:
class Product: Object {
dynamic var name = ""
dynamic var brand = ""
}
let productsFilter: [(name: String, brand: String)] = [("cookies", "brand x"), ("water", "brand y")]
let subPredicates = productsFilter.map {
NSPredicate(format: "name = %@ && brand = %@", $0.name, $0.brand)
}
let compoundPredicate = NSCompoundPredicate(orPredicateWithSubpredicates: subPredicates)
let realm = try Realm()
let products = realm.objects(Product.self).filter(compoundPredicate)