强制执行RLMArray的最佳方法是什么,可以支持NSFastEnumerationIterator?
internal override func buildEntryFromResultObject(_ object: RLMObject, x: Double) -> ChartDataEntry
{
let value = object[_yValueField!]
let entry: BarChartDataEntry
if value is RLMArray<AnyObject>
{
var values = [Double]()
var iterator = NSFastEnumerationIterator(value as! RLMArray)
while let val = iterator.next()
{
values.append((val as! RLMObject)[_stackValueField!] as! Double)
}
entry = BarChartDataEntry(x: _xValueField == nil ? x : object[_xValueField!] as! Double, yValues: values)
}
else
{
entry = BarChartDataEntry(x: _xValueField == nil ? x : object[_xValueField!] as! Double, y: value as! Double)
}
return entry
}
答案 0 :(得分:1)
从您的问题来看,您似乎更感兴趣的是如何在Swift中进行RLMArray
迭代,而不是将其与NSFastEnumerationIterator
一起使用。
Realm's documentation有这样的说法:
我们建议您编译Swift/RLMSupport.swift文件(我们的发布zip文件中也提供了该文件)。此文件为Realm Objective-C集合类型添加了
Sequence
一致性,并重新公开了Swift本身无法访问的Objective-C方法,包括可变参数。Realm Objective-C默认不包含此文件,因为这会强制Realm Objective-C的所有用户包含大量的Swift动态库,无论他们是否在他们的应用程序中使用Swift!