swift - 使用主键列表过滤从领域中查询多个对象
问题描述
我正在尝试使用主键字符串列表从领域查询多个对象。我知道我可以使用 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 或什么?任何有关谓词语法的帮助将不胜感激!
解决方案
我想你是在问如何在领域中查询具有与数组中的一组键匹配的键的项目。
所以给定一个 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 的任何狗。
你也可以传入 Realm List Object 而不是 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)
}
推荐阅读
- android - 如何从无 UI 线程更新 RecyclerView
- html - 我需要帮助我的部分使用 BEM 方法
- c# - 暂停对 ObservableCollection 的更新
在 C# 和 WPF 中 - c# - .net core rest api post end - 从正文中读取查询字符串
- r - 使用for循环填充r中矩阵的值
- javascript - 为什么自定义钩子,带有useEffect的上下文会导致无限循环?
- excel - 在 Excel 上创建的每个条目创建 6 行条目
- javascript - 将所有 Tp 转移到最高订单价格之一 (Mql4)
- .net-core - .NET Core 3.1 中 Windows 和 Linux 上的异常行为 X509Chain.Build()
- laravel - 删除记录并显示下一个而不重新加载整页?