使用主键列表过滤从 Realm 查询多个对象

Filter querying multiple objects from Realm using List of Primary Keys

我正在尝试使用主键字符串列表从 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 还是什么?非常感谢任何有关谓词语法的帮助!

我想您是在询问如何在 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 的任何狗。

您也可以传入领域列表对象而不是 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)
}

let predicate = NSPredicate(格式: "itemKey IN %@", primaryKeyArray)