我在弄清楚如何将普通的快速过滤代码转换为使用Realm的NSPredicate查询时遇到了一些麻烦。我已经包含了一个简化的数据结构示例。我的目标是弄清楚设备中哪些用户的联系人已经注册了我的应用。
1
每个用户对象都包含一个'联系人'这些是当前存储在用户设备上的所有联系人。并且每个人都联系了'对象有一个'数字列表'因为每个联系人都可以有多个电话号码。
在常规快速代码中,找出已为我的应用注册的用户联系人的内容如下所示:
class User: Object {
let contacts = List<Contact>()
}
class Contact: Object {
let numbers = List<String>()
}
所以问题是,为了提高效率,我如何更改此功能以改为使用NSPredicates?
提前感谢您的帮助!
答案 0 :(得分:0)
Realm目前不支持使用其谓词类型为基元列表的属性。在解除限制之前,不可能仅使用NSPredicate
来过滤对象。
如果你愿意改变你的模型:
class StringObject: Object {
@objc dynamic var string = ""
}
class Contact: Object {
let numbers = List<StringObject>()
}
class User: Object {
let contacts = List<Contact>()
}
这应该允许您像这样执行过滤:
return contacts.filter("ANY numbers.value IN %@",
allUsers.flatMap { return $0.phoneNumber })