2015-10-27 13 views
8

Ist es möglich, Results<T> zu List<T> zu konvertieren oder sollte ich das nicht tun?Realm: Ergebnisse <T> als Liste <T>

In meinem Fall habe ich eine Methode, die Liste als Parameter hat. Ich möchte mit hergeholt Objekte zum Aufrufen dieser Methode (Results<T>) und mit berechneten Objekte (List<T>)

+0

Können Sie die Tatsache nutzen, dass sie beide "RealmCollectionType" sind? –

Antwort

4

Results und List implementieren CollectionType und RealmCollectionType. Letzteres ist eine Spezialisierung des früheren Protokolls, die es Ihnen ermöglicht, Aggregationsfunktionen effizient zu nutzen und & Sortiereinträge zu filtern.

Fast keine Methode in Realm Swift macht starke Annahmen über den Typ der Sammlung. Sie erwarten nur eine SequenceType, die eine Verallgemeinerung der ehemaligen CollectionType ist. Für Ihre eigene Methode würde ich empfehlen, den gleichen Weg zu gehen. Sie können das erreichen, indem Sie es wie unten gezeigt deklarieren.

func foo<T, S: SequenceType where S.Generator.Element == T>(objects: S) { … } 
11

Results implementiert das CollectionType Protokoll, so dass Sie reduce verwenden könnte es zu konvertieren:

let results: Results<MyObject> = ... 
let converted = results.reduce(List<MyObject>()) { (list, element) -> List<MyObject> in 
    list.append(element) 
    return list 
} 

Sie diesen Code setzen könnte in eine Verlängerung oder wie du willst.

Verwandte Themen