领域:结果<T> 与列表<T>
Realm: Results<T> als List<T>
是否可以将 Results<T>
转换为 List<T>
或者我不应该这样做?
在我的例子中,我有一个将 List 作为参数的方法。我想用获取的对象 (Results<T>
) 和计算的对象 (List<T>
)
调用此方法
Results
实现了 CollectionType
协议,所以你可以使用 reduce
来转换它:
let results: Results<MyObject> = ...
let converted = results.reduce(List<MyObject>()) { (list, element) -> List<MyObject> in
list.append(element)
return list
}
您可以将此代码放在扩展名中,或者按照您喜欢的方式。
Results
和 List
实现 CollectionType
和 RealmCollectionType
。后者是前者协议的特殊化,它允许您有效地使用聚合函数和过滤和排序条目。
Realm Swift 中几乎没有方法对集合的类型做出强有力的假设。他们只是期望 SequenceType
这是前者 CollectionType
的概括。对于您自己的方法,我建议采用相同的方法。您可以通过如下所示声明它来实现。
func foo<T, S: SequenceType where S.Generator.Element == T>(objects: S) { … }
我们可以使用扩展程序让生活更轻松:
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
}
}
用法:
let objects = realm.list(YourObject.self)
我将使用计算变量为 Results
创建一个扩展:
extension Results {
var list: List<Element> {
reduce(.init()) { list, element in
list.append(element)
return list
}
}
}
那么你可以这样使用它:
// results is a variable of type Results<SomeElement>
let list = results.list
是否可以将 Results<T>
转换为 List<T>
或者我不应该这样做?
在我的例子中,我有一个将 List 作为参数的方法。我想用获取的对象 (Results<T>
) 和计算的对象 (List<T>
)
Results
实现了 CollectionType
协议,所以你可以使用 reduce
来转换它:
let results: Results<MyObject> = ...
let converted = results.reduce(List<MyObject>()) { (list, element) -> List<MyObject> in
list.append(element)
return list
}
您可以将此代码放在扩展名中,或者按照您喜欢的方式。
Results
和 List
实现 CollectionType
和 RealmCollectionType
。后者是前者协议的特殊化,它允许您有效地使用聚合函数和过滤和排序条目。
Realm Swift 中几乎没有方法对集合的类型做出强有力的假设。他们只是期望 SequenceType
这是前者 CollectionType
的概括。对于您自己的方法,我建议采用相同的方法。您可以通过如下所示声明它来实现。
func foo<T, S: SequenceType where S.Generator.Element == T>(objects: S) { … }
我们可以使用扩展程序让生活更轻松:
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
}
}
用法:
let objects = realm.list(YourObject.self)
我将使用计算变量为 Results
创建一个扩展:
extension Results {
var list: List<Element> {
reduce(.init()) { list, element in
list.append(element)
return list
}
}
}
那么你可以这样使用它:
// results is a variable of type Results<SomeElement>
let list = results.list