Realm Swift - 按 ID 查找

Emi*_*uet 4 realm swift

我需要使用 id 列表查询 Realm 对象,id 是对象的主键。我已经尝试过以下方法:

// Query a list of Dogs by their _ids
let doggoIds = ["1", "2", "3", "1", "2"]
realm.objects(Dog.self).filter("_id IN %@", doggoIds)
// Result: [Dog1, Dog2, Dog3]
Run Code Online (Sandbox Code Playgroud)

id 列表包含重复项,但正如您所看到的,结果是唯一的 Dog 对象的列表。

我想知道是否有人可以想出一种不同的方式来编写这个查询,以便我们Results<Dog>从包含重复项的 id 列表中获得一个很好的集合。谢谢!

Jay*_*Jay 5

领域结果包含唯一的对象,因此最简单的解决方案是查询每只狗并将结果添加到数组中。CompactMap 做得很好,因为它过滤掉了 nil。

let listOfDogsToFind = ["Fido", "Dino", "Sport", "Fido", "Cupid"]

let dogArray = listOfDogsToFind.compactMap { dogName -> DogClass? in
    if let result = realm.objects(DogClass.self).filter("dog_name == %@", dogName).first {
        return result
    }
    return nil
}

for dog in dogArray {
    print("dog name: \(dog.dog_name)")
}
Run Code Online (Sandbox Code Playgroud)

假设丘比特不存在,这是输出

dog name: Fido
dog name: Dino
dog name: Sport
dog name: Fido
Run Code Online (Sandbox Code Playgroud)