如何使用 NSPredicate 判断一个 Int 列表是否包含一个 Int 数字?

How to use NSPredicate for whether a List of Int contains a Int number?

我有一个 Realm 模型 Person,它有一个标签 属性。

let tags = List<Int>()

现在,我想执行这样的搜索

realm.objects(Person.self).filter(NSPredicate(format: "\(tagID) IN tags"))
// "0 IN tags"

错误:

Terminating app due to uncaught exception 'Invalid value', reason:
 'Expected object of type (null) for property 'tags' on object of type
 'Person', but received: 0'

正如 David 的评论中所述,您不能对基元列表进行过滤。

编辑: 版本 10.7 添加了对 filters/queries 的支持以及基元上的聚合函数,因此以下信息不再完全有效。不过,还是要注意一下。

您只能过滤包含领域对象的列表。但是,还有其他解决方案。

在这里我们获取所有的 Realm 对象并使用 Swift 过滤对象。在这种情况下,我们希望所有具有标签 = 7 的人。

let personResults = realm.objects(PersonClass.self)
let persons = personResults.filter { [=10=].tags.firstIndex(of: 7) != nil }
    
for person in persons {
    print(person.name)
}

另一种选择,请参阅@DávidPásztor 评论中 link 处的答案。