如何使用 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 处的答案。
我有一个 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 处的答案。