将Swift数组的Realm对象转换回Realm结果

时间:2016-10-21 20:55:20

标签: swift3 realm

我有一个Entry类,其中包含FieldValue个对象的列表:

class Entry: Object{
  let fieldValues = List<FieldValue>()
  //...
}

class FieldValue: Object{
  dynamic var total = 0
  //...
}

我对查询中的某些条目进行了大量过滤,如下所示:

var entryObjects = realm.objects(Entry.self).filter(...)

我现在想要sum我过滤的total中仍然存在的所有fieldValues的{​​{1}}值。因此,如果我遍历所有条目,我可以构建一个entryObjects对象数组,如下所示:

FieldValue

我现在var fieldValues = [FieldValue]() for entry in entryObjects{ fieldValues += entry.fieldValues } 类型为fieldValues。但是为了在[FieldValue]属性上执行sum,它必须是total类型:

Results<FieldValue>

如何将let total:Int = fieldValues.sum(ofProperty: "total") <-- /// Error! /// 数组转换回[FieldValue],以便我可以对其进行汇总操作?

1 个答案:

答案 0 :(得分:3)

这样做:

let entryObjects = realm.objects(Entry.self).filter(...)
let total = entryObjects.map({ $0.fieldValues.sum(ofProperty: "total") }).reduce(0, +)

当Realm支持对嵌套密钥路径(#3392)的聚合操作时,可以使用KVC,但这仍然在进行中。