2017-01-27 2 views
0

Mein übergeordnetes Ziel ist es, ein UITableView zu erstellen, das alphabetische Abschnittsüberschriften enthält, die auf den Werten in einem Wörterbuch basieren.Anzeige der Wörterbuchwerte in einem UITableViewCell

Ich habe ein grundlegendes Objekt, das den Namen und die Beschreibung der Frucht enthält. Ich möchte die Namen der Frucht auf jeder UITableCell, unter dem entsprechenden Buchstaben für den Abschnitt Titel angezeigt werden.

Letztlich ist die Tableview etwas wie folgt aussehen: (wo CPS die Abschnittstitel sind)

C------------ 
Clementine 
Cherry 
Coconut 
P------------ 
Pear 
Peach 
S------------ 
Strawberry 

Hier ist meine Daten:

var fruitModel = [String:Any]() 


fruitModel = [ 
    "C" : [ 
    FruitModel(name: "Clementine", description: "Clementines are super tasty!"), 
    FruitModel(name: "Cherry", description: "Cherry's are red."), 
    FruitModel(name: "Coconut", description: "Nuts for coconuts!!!"), 
    ], 
    "P" : [ 
    FruitModel(name: "Pear", description: "Pears rock!"), 
    FruitModel(name: "Peach", description: "Mmmm, Peach."), 
    ], 
    "S" : [ 
    FruitModel(name: "Strawberry", description: "A widely grown hybrid species of the genus Fragaria. It is cultivated worldwide for its fruit.") 
    ] 
] 

Der Teil, der mich weg ist werfen wird Zugreifen auf die Namenszeichenfolge innerhalb des Wörterbuchwerts und Anzeigen in cellForRowAt. Der Code unten ist, wo ich stecken bin:

cellForRowAt:

var allValues = Array(fruitModel.values) 
cell.fruitNameLabel.text = (allValues[indexPath.row] as AnyObject).name // Cannot subscript a value of type 'inout Array<Any>' 

Sobald ich herausfinden, wie in jeder Zelle der Fruchtnamen anzuzeigen, ich werde in der Lage sein, arbeiten, um die Abschnittstitel zu erhalten. Ich brauche nur Hilfe mit meinem Fehler, den ich bekomme. Vielen Dank.

Antwort

1

Siehe Swift Dictionary: Get values as array für den Fehler, mit dem Sie über die Indizierung konfrontiert werden.

Es gibt jedoch ein größeres Problem bei der Reihenfolge der Zellen, da die Rückgabe von Wörterbuchwerten in der Reihenfolge nicht garantiert ist, in der sie hinzugefügt wurden.

Ein Dictionary speichert Zuordnungen zwischen Schlüsseln des gleichen Typs und Werten desselben Typs in einer Auflistung ohne definierte Reihenfolge.

So müssen Sie die Datenstruktur zu überdenken, die Sie verwenden, wenn Sie sie in alphabetischer Reihenfolge angezeigt werden sollen.

+0

"keine definierte Reihenfolge" ist der Dolch, was? Dang. Was würdest du als Struktur empfehlen? Denken Sie daran, alles, was ich wirklich erreichen möchte, ist die Tabellenansicht, die alphabetisch mit Abschnittsüberschriften geordnet werden soll. Ich dachte nur, ein Wörterbuch wäre am einfachsten, um mein Modell zu verwalten. – Joe

+0

Ein Array mit Tupeln würde den Trick machen. '[(String, [FruitModel])] so können Sie eine konsistente Reihenfolge beibehalten. –

+0

Behalten Sie einfach ein Array, das die sortierten Schlüssel des Wörterbuchs ist. – vacawama

Verwandte Themen