关于 swift3:Convert Swift Array of Realm Objects Back to Realm 结果

Convert Swift Array of Realm Objects Back to Realm Results

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

1
2
3
4
5
6
7
8
9
class Entry: Object{
  let fieldValues = List<FieldValue>()
  //...
}

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

我对查询中的一些条目进行了一系列过滤,如下所示:

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

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

1
2
3
4
var fieldValues = [FieldValue]()
for entry in entryObjects{
  fieldValues += entry.fieldValues  
}

我现在有 [FieldValue] 类型的 fieldValues。但是为了对其 total 属性执行 sum,它必须是 Results<FieldValue>:

类型

1
let total:Int = fieldValues.sum(ofProperty:"total") <-- /// Error! ///

如何将我的 [FieldValue] 数组转换回 Results<FieldValue> 以便对其进行聚合操作?


这样做:

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

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