作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
let selectedConsoles = ["Xbox", "Playstation 4"]
let players = realm.objects(Person).filter("consoles IN %@", selectedConsoles)
假设玩家的属性控制台是 List<console>()
所以我想过滤所有同时拥有 xbox 和 playstation 4 的玩家。目前我可以通过 OR 比较来过滤它们,我的目标是实现 AND 比较,例如目前它只检查“xbox”或“playstation 4”存在于玩家的控制台中。我想返回具有两个控制台的玩家。任何帮助或提示将不胜感激
最佳答案
要获得同时拥有这两种控制台的用户,您需要“和”他们。如果想要选择具有 EITHER 的那些,则需要将它们“或”在一起。如果你“和”他们,你必须同时拥有,否则它不会被包括在内,如果你“或”他们,如果其中一个存在,它就会被包括在内。
因此您需要创建复合“或”谓词。您为要包含的每个案例创建一个谓词,然后使用复合谓词“或”[或“和”] 将所有谓词组合在一起。
我根据您上面提供的内容做出了一些猜测,但这应该非常接近。让我知道它是否需要澄清或清理。它可以编译,但我没有为它创建测试数据集。用您的变量名(对于您的 Realm 对象)和类名替换
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)
关于swift - RealmSwift ALL 谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45338083/
我是一名优秀的程序员,十分优秀!