我看到了:
类型
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框架的情况下解决这个问题(我宁愿等待发布,也不要自行构建主分支)
答案 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 RLMResults
和RLMArray
与Sequence
的一致性已暂时停用。希望在Xcode 8退出测试版之前解决Swift编译器问题。
支持Swift 3与Realm Swift在Realm的主分支上,以及现有的Swift 2支持。一旦Xcode 8和Swift 3在今年晚些时候完成,它将在Realm Swift的版本中出现。