RLMArray不支持快速枚举NSFastEnumerationIterator?

时间:2018-01-02 04:52:49

标签: ios realm

强制执行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
}

1 个答案:

答案 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!