是否有可能转换Results<T>为List<T>或不应该这样做?
在我的情况下,我有方法将List作为参数.我想用fetched objects(Results<T>)和计算对象(List<T>)调用此方法
Pul*_*sar 22
Results实现CollectionType协议,以便您可以使用reduce它来转换它:
let results: Results<MyObject> = ...
let converted = results.reduce(List<MyObject>()) { (list, element) -> List<MyObject> in
list.append(element)
return list
}
Run Code Online (Sandbox Code Playgroud)
您可以将此代码放在扩展名中,或者您喜欢.
Results并List实施CollectionType和RealmCollectionType。后者是前一种协议的一种特殊化,它使您可以有效地使用聚合函数以及过滤和排序条目。
在Realm Swift中,几乎没有方法对集合的类型做出强有力的假设。他们只是期望a SequenceType是前者的概括CollectionType。对于您自己的方法,建议使用相同的方法。您可以通过如下所示进行声明来达到目的。
func foo<T, S: SequenceType where S.Generator.Element == T>(objects: S) { … }
Run Code Online (Sandbox Code Playgroud)
我们可以使用扩展来让生活更轻松:
extension Realm {
func list<T: Object>(_ type: T.Type) -> List<T> {
let objects = self.objects(type)
let list = objects.reduce(List<T>()) { list, element -> List<T> in
list.append(element)
return list
}
return list
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
let objects = realm.list(YourObject.self)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6830 次 |
| 最近记录: |