RealmSwift ALL谓词

时间:2017-07-26 21:54:55

标签: swift realm

let selectedConsoles = ["Xbox", "Playstation 4"]
let players = realm.objects(Person).filter("consoles IN %@", selectedConsoles)

让我们说玩家的属性控制台是List<console>()

所以我想过滤所有同时拥有xbox和playstation 4的玩家。目前我可以通过OR比较过滤它们,我的目标是实现AND比较,例如目前它只检查“xbox”或玩家的游戏机中存在“playstation 4”。我想要归还拥有两个游戏机的玩家。 任何帮助或提示将不胜感激

1 个答案:

答案 0 :(得分:2)

要获得具有两种类型控制台的人,您需要“和”他们。如果想要选择那些有EITHER的人,你需要将它们“或”在一起。如果你“和”他们你必须同时拥有它们,或者它们不会被包括在内,如果你“或”它们,如果它们存在则包含它们。

所以你需要创建一个复合“或”谓词。您为要包含的每个案例创建谓词,然后使用复合谓词“或”[或“和”]将所有谓词组合在一起。

我根据你上面提供的内容做了一些猜测,但这应该非常接近。如果需要澄清或清理,请告诉我。它编译,但我没有为它创建测试数据集。替换你的变量名(对于你的领域对象)和类名,用于&lt;尖括号内的变量&gt;。

    let selectedConsoles = ["Xbox", "Playstation 4"]
    let predicateOne = NSPredicate(format:"consoles IN %@", [selectedConsoles[0]])
    let predicateTwo = NSPredicate(format:"consoles IN %@", [selectedConsoles[1]])
    let compoundPredicateEitherConsole = NSCompoundPredicate(orPredicateWithSubpredicates: [predicateOne, predicateTwo])
    let compoundPredicateBothConsoles = NSCompoundPredicate(andPredicateWithSubpredicates: [predicateOne, predicateTwo])
    let results = <realm>.objects(<YourClassName>.self).filter(compoundPredicateEitherConsole)