2016-12-20 3 views
2

Ich habe eine lokale db (Realm) mit Getränken. Jedes Getränk hat einen Namen.Filter auf den ersten Buchstaben des Eigentums

Ich möchte alle Getränke mit einem bestimmten Buchstaben beginnen.

Das ist, was ich kam mit:

let objects = realm.objects(Drank.self) 
        .filter{($0.name.characters.first)?.description == section} 

Das Problem, das ich jetzt habe, ist, dass die Objekttyp I erhalten, ist eine 'LazyFilterBidirectionalCollection'. Aber ich brauche Ergebnisse.

Kennt jemand einen Weg, um es in den richtigen Typ zu konvertieren oder vielleicht eine andere Möglichkeit, das Resultset zu filtern?

Antwort

4

Dies ist gerade aus dem Bereich docs auf Sortierung/Filterung:

let sortedDogs = realm.objects(Dog.self).filter("color = 'tan' AND name BEGINSWITH 'B'").sorted(byProperty: "name") 

So etwas filtern Sie nach vielleicht so etwas wie folgt aussehen:

let objects = realm.objects(Drank.self) 
       .filter("name BEGINSWITH '\(column)'") 

Eine sicherere Option unten von Thomas vorgeschlagen Goyne,

let objects = realm.objects(Drank.self) 
       .filter("name BEGINSWITH %@", column) 

Da Sie jetzt Daten mit dem Weg filtern die d ocs verwenden Sie sollten ein Ergebnisobjekt erhalten

Haben Sie keine Angst, die Dokumentation zu lesen, nicht nur werden Sie in der Lage sein, die Befriedigung zu bekommen, es herauszufinden, Sie werden auch eine Reihe anderer Dinge entlang der lernen Weg.

+0

Sie könnten auch die 'hasPrefix'-Funktion verwenden. Könnte einfacher sein. – Fogmeister

+1

Während es in diesem Fall vermutlich gut ist, sollten Sie '.filter (" name BEGINSWITH% @ ", column)' zum Filtern von Strings verwenden, da Swifts Stringinterpolation bricht, wenn die Zeichenfolge ein Apostroph enthält. –

Verwandte Themen