我正在尝试使用主键字符串列表从Realm查询多个对象。我知道我可以使用for..in循环来做到这一点,但如果可能的话,我宁愿使用过滤器。
primaryKeyArray包含许多字符串
class Item : Object {
@objc dynamic var itemKey = NSUUID().uuidString
}
var primaryKeyArray : List<String>?
//Assume Realm DB already contains multiple Item Objects
//primaryKeyArray contains "key1", "key2", "key3", etc..
let predicate = NSPredicate(format: "itemKey == %@", primaryKeyArray)
let items = realm.objects(Item.self).filter(predicate)
我知道问题在于我的谓词格式。不确定要使用某种形式的CONTAINS还是什么?谓词语法的任何帮助将不胜感激!
答案 0 :(得分:0)
我想您是在问如何查询Realm中具有与数组中的一组键匹配的键的项。
所以给了一个DogClass领域对象
class DogClass: Object {
@objc dynamic var dog_id = NSUUID().uuidString
@objc dynamic var dog_name = ""
override static func primaryKey() -> String? {
return "dog_id"
}
}
并且假设我们知道我们想要检索与某些给定主键匹配的三只狗
let keysToMatch = ["302AC133-3980-41F3-95E8-D3E7F639B769", "54ECC485-4910-44E5-98B9-0712BB99783E", "71FE403B-30CD-4E6C-B88A-D6FDBB08C509"]
let dogResults = realm.objects(DogClass.self).filter("dog_id IN %@", keysToMatch)
for dog in dogResults {
print(dog.dog_id, dog.dog_name)
}
请注意在过滤器中使用IN,它将匹配给定数组中所有ID为ID的狗。
您还可以传入Realm列表对象而不是Swift数组,并获得相同的结果。
let listOfKeysToMatch = List<String>()
listOfKeysToMatch.append("302AC133-3980-41F3-95E8-D3E7F639B769")
listOfKeysToMatch.append("54ECC485-4910-44E5-98B9-0712BB99783E")
listOfKeysToMatch.append("71FE403B-30CD-4E6C-B88A-D6FDBB08C509")
let dogResults2 = realm.objects(DogClass.self).filter("dog_id in %@", listOfKeysToMatch)
for dog in dogResults2 {
print(dog.dog_id, dog.dog_name)
}
答案 1 :(得分:0)
let predicate = NSPredicate(格式:“ itemKey IN%@”,primaryKeyArray)