首页 > 解决方案 > 快速过滤领域列表

问题描述

class RetailerModel: BaseResponse {
var customFields = List<CustomFieldsModel>()
}

class CustomFieldsModel: BaseResponse {
@objc dynamic var params : ParamsModel?
}

class ParamsModel: BaseResponse {
var options = List<String>()
}

我正在使用领域来获取数据, RetailerModel有一个 CustomFieldsModel 对象,CustomFieldsModel一个ParamsModel 对象,ParamsModel包含想要过滤我的 RetailerModel 数据的数组

这是来自 json 的数组,ParamsModel包含 "options": ["custom", "Towers"]

我想要的只是具有“自定义”选项的所有 RetailerModel 的列表

标签: iosswiftrealm

解决方案


这是一个非常具有挑战性的查询,但我想我有一个解决方案。

然而,首先;领域列表中的原语没有得到很好的支持,并且还不能查询。请参阅此处以获取更多信息。

编辑: 10.7 版增加了对过滤器/查询以及原语上的聚合函数的支持,因此以下信息不再完全有效。但是,仍然需要注意。

所以我们需要添加另一个类来保存字符串数据

class StringClass: Object {
    @objc dynamic var myString = ""
}

所以下面的类将被更新以匹配

class ParamsModel: BaseResponse {
    var options = List<StringClass>()
}

然后,由于对象的深度,我们需要利用子查询来执行查询。

let predicate = NSPredicate(format: "SUBQUERY(customFields, $customField, ANY $customField.params.options.myString == 'custom').@count > 0")
let results = realm.objects(RetailerModel.self).filter(predicate)

这将返回其 CustomFieldsModel 具有 ParamsModel 选项列表属性 StringClass myString 属性等于“自定义”的所有零售商模型


推荐阅读