Swift 3.0:输入&#39; RLMResults <rlmobjecttype>&#39;不符合协议&#39;序列&#39;

时间:2016-07-25 05:40:43

标签: realm swift3

我看到了:

  

类型RLMResults<RLMObjectType>不符合协议Sequence

转换为Swift 3.我正在寻找一个版本的Realm for Swift 3.0,但我找不到合适的版本,甚至是分支。

我试着写一个扩展名,但仍然是同样的错误信息:

extension RLMResults: Sequence
{
    public func makeIterator() -> RLMResults.Iterator
    {
        return NSFastEnumerationIterator(self)
    }
}

如何修复它,或者我可以在哪里找到合适的框架或分支?

更新: 需要Sequence协议的代码:

public class RealmChartUtils: NSObject
{
    /// Transforms the given Realm-ResultSet into an xValue array, using the specified xValueField
    public static func toXVals(results: RLMResults<RLMObject>, xValueField: String) -> [String]
    {
        let addedValues = NSMutableSet()
        var xVals = [String]()

        for object in results // <-- here needs Sequence protocol
        {
            let xVal = (object as! RLMObject)[xValueField] as! String!
            if !addedValues.contains(xVal!)
            {
                addedValues.add(xVal!)
                xVals.append(xVal!)
            }
        }

        return xVals
    }
}

所以在swift 2.2中,我们在上面的函数之后添加了一个如下所示的扩展名:

extension RLMResults: SequenceType
{
    public func generate() -> NSFastGenerator
    {
        return NSFastGenerator(self)
    }
}

extension RLMArray: SequenceType
{
    public func generate() -> NSFastGenerator
    {
        return NSFastGenerator(self)
    }
}

所以在Xcode 8 beta 3中,它说SequenceType已重命名为Sequence,但这是原始问题,因为我尝试使上面的扩展符合Sequence(这是我的首先发布扩展名),编译器一直说Type RLMResults<RLMObjectType> does not conform to protocol Sequence

我是否可以在不升级Realm swift框架的情况下解决这个问题(我宁愿等待发布,也不要自行构建主分支)

1 个答案:

答案 0 :(得分:2)

如何让RLMResults符合Sequence

有关如何使Realm Objective-C类型从Swift更自然地工作的信息,请参阅Using Realm Objective-C from Swift。请特别注意RLMSupport.swift上的部分:

  

我们建议您编译Swift / RLMSupport.swift文件(也可以在我们的发行版zip中找到)。

     

此文件为Realm Objective-C集合类型添加了SequenceType一致性,并重新公开了Swift本身无法访问的Objective-C方法,包括可变参数的方法。

     

Realm Objective-C默认不包含此文件,因为这会强制Realm Objective-C的所有用户包含大量的Swift动态库,无论他们是否在他们的应用程序中使用Swift!

但是,由于a bug in the Swift 3 compiler RLMResultsRLMArraySequence的一致性已暂时停用。希望在Xcode 8退出测试版之前解决Swift编译器问题。

我可以在哪里找到支持Swift 3的Realm?

支持Swift 3与Realm Swift在Realm的主分支上,以及现有的Swift 2支持。一旦Xcode 8和Swift 3在今年晚些时候完成,它将在Realm Swift的版本中出现。