我有一个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]
,以便我可以对其进行汇总操作?
答案 0 :(得分:3)
这样做:
let entryObjects = realm.objects(Entry.self).filter(...)
let total = entryObjects.map({ $0.fieldValues.sum(ofProperty: "total") }).reduce(0, +)
当Realm支持对嵌套密钥路径(#3392)的聚合操作时,可以使用KVC,但这仍然在进行中。