我想查询具有多个过滤器的所有产品,例如:
所有产品: [(name: "cookies", brand: "brand x"), (name: "water", brand: "brand y")]
如果我只有一个过滤器,例如(name: "cookies", brand: "brand x")答案是明确的:name == \(tuple.name) AND brand == \(tuple.brand)
如果我有多个元组但只有一个属性,那么它也很清楚:
return "name IN {\(["cookies", "water"].joined(separator: ","))}"
Run Code Online (Sandbox Code Playgroud)
但是如何为我的元组数组编写过滤器?一个想法是Results使用前一个查询将每个获取为单个name == \(tuple.name) AND brand == \(tuple.brand),并使用此构建一个数组,但我需要最终结果而Results不是数组.
也可能这样的事情,但我认为这是不可能的?
return "name::brand IN {\(["cookies::brand x", "water::brand y"].joined(separator: ","))}"
Run Code Online (Sandbox Code Playgroud)
好像你想要将谓词组合在一起NSCompoundPredicate:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
640 次 |
| 最近记录: |