如何使RLMResults可变?
领域文档说RLMResults
舔NSArray
。 我有一些从数据库返回的结果,我想合并到另一个RLMResults
。 但它似乎是不可改变的,如何使RLMResults
从另一个RLMResults
添加对象? 或使其变得可变? 或将其转换为NSArray
?
目前这是你必须手动完成的。 你可以通过连接你的两个结果来创build一个RLMArray。
尽pipe如此,我们正在讨论在同types的RLMObjects路线图上更进一步的联合/合并方法。
任何你可以分享的东西都将帮助我们理解用例,并可能影响apidevise
只要它们是相同的types,这里就是一个通用的例子
let currentTask = Task.objectsWhere("name = %@", "First task").firstObject() as Task let currentRecords = currentTask.records let arrayOfRecords = RLMArray(objectClassName: "Record") arrayOfRecords.addObjects(currentRecords) let futureTask = Task.objectsWhere("name = %@", "Future task").firstObject() as Task let futureRecords = futureTask.records arrayOfRecords.addObjects(futureRecords)
我发现了来自duemunk的解决scheme: https : //github.com/realm/realm-cocoa/issues/1046
基本上我把RLMResults转换为[RLMObject]: func toArray<T>(ofType: T.Type) -> [T] { var array = [T]() for result in self { if let result = result as? T { array.append(result) } } return array }
func toArray<T>(ofType: T.Type) -> [T] { var array = [T]() for result in self { if let result = result as? T { array.append(result) } } return array }
let tracks = Track.allObjects().toArray(Track.self) // tracks is of type [Track]