领域:结果<T> als List <T>

net*_*000 12 realm ios swift

是否有可能转换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)

您可以将此代码放在扩展名中,或者您喜欢.


mar*_*ius 5

ResultsList实施CollectionTypeRealmCollectionType。后者是前一种协议的一种特殊化,它使您可以有效地使用聚合函数以及过滤和排序条目。

在Realm Swift中,几乎没有方法对集合的类型做出强有力的假设。他们只是期望a SequenceType是前者的概括CollectionType。对于您自己的方法,建议使用相同的方法。您可以通过如下所示进行声明来达到目的。

func foo<T, S: SequenceType where S.Generator.Element == T>(objects: S) { … }
Run Code Online (Sandbox Code Playgroud)


Hos*_*ein 1

我们可以使用扩展来让生活更轻松:

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)