在领域列表中过滤 swift

Filter in realm list swift

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 有一个对象 ParamsModelParamsModel 包含我要过滤 RetailerModel 数据的数组

这是来自 json 的数组,ParamsModel 包含 “选项”:[“自定义”, “塔楼”]

我想要的只是具有选项 "custom"

的所有 RetailerModel 的列表

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

首先;领域列表中的原语没有得到很好的支持,而且还不可查询。有关更多信息,请参阅 and

编辑: 版本 10.7 添加了对 filters/queries 的支持以及基元上的聚合函数,因此以下信息不再完全有效。不过,还是要注意一下。

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

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

因此以下 class 将更新以匹配

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)

这将 return 其 CustomFieldsModel 具有 ParamsModel 选项列表 属性 StringClass myString 属性 等于 'custom'

的所有零售商模型