0

Ich habe eine Reihe von Wörterbüchern mit der folgenden Strukturtyp (die bereits sortiert ist):vom Wörterbuch Generieren Abschnittsüberschriften [Swift 3]

[ 
[ 
    "id": 1, 
    "name": "ItemA", 
    "url": "http://url.com" 
], 
[ 
    "id": 32, 
    "name": "ItemB", 
    "url": "http://url.com" 
], 
... 
] 

als Array von Wörterbüchern erklärt für ANYOBJECT:

var arrayApps = [[String:AnyObject]]() 

Dieses Array von Wörterbüchern ist SwiftyJson erzeugt unter Verwendung:

[..] 
if let resData = swiftyJsonVar["data"].arrayObject { 
    self.arrayItems = resData as! [[String:AnyObject]] 
} 
[..] 

Mein Ziel ist um diese Elemente in Abschnitten anzuzeigen, indem Sie die Abschnittsüberschriften verwenden, aber nachdem ich versucht habe, es herauszufinden und nach einer Antwort zu suchen, kann ich nicht weitergehen. Ich habe versucht, die Wörterbücher von Briefen an groupe ein Ergebnis wie dieses zu erhalten:

[ 
    "A":{[foo1],[foo2]}, 
    "D":{[foo3],[foo5]}, 
    "F":{[foo4],[foo6]} 
    ... 
] 

Aber kein Glück, habe ich immer mit Fehlern beendet wurde, weil mein Array „Optionals“ enthält.

Zusammengefasst: Wie kann ich Alphabetische Abschnittsüberschriften erzeugen basierend auf dem Namen in einem Tableview eine Reihe von Wörterbüchern mit nicht wie die oben genannten 3 in Swift gegebenen gruppiert?

Vielen Dank im Voraus!

+0

Welcher Schlüssel des Wörterbuchs sollte berücksichtigt werden, um alphabetisch zu bestellen? – shallowThought

+0

Hallo, es ist der Name Schlüssel und ich versuche, die Buchstaben als Abschnitt Kopfzeilen zu haben – blackjak231

+0

Der "Name" -Taste enthält keine Zeichenfolge. Oder soll "ItemA" "SomeString" sein? – shallowThought

Antwort

1

Sie können die .sorted(by:)-Methode von Array verwenden, um Elemente Ihres Arrays miteinander zu vergleichen.

Dies ergibt eine sortedArray:

let sortedArray = arrayOfApps.sorted(by: {($0["name"] as! String) <= ($1["name"] as! String)}) 

Dies wird abstürzen, wenn die itemName kein String ist, aber ich überließ es Sie Fehler zu behandeln. Zum Beispiel ändert es an:

$0["name"] as? String ?? "" 

EDIT: // Removed Beispiele und hinzugefügt Erweiterung erstellen gewünschte Ergebnis

ich einen meiner alten Projekte gefunden, wo ich eine solche Verlängerung schrieb. Änderte es ein bisschen zu Ihren Bedürfnissen, sagen Sie mir, wenn es etwas Änderung noch benötigt:

+0

Danke für deine Antwort, aber dieser Teil ist bereits abgedeckt :) Die API, die die Daten zurückgibt, sortiert sie bereits und ich konnte auf der App-Seite sortieren. Mein Problem ist, wie man sie nach dem ersten Buchstaben des "Namens" gruppiert, um Abschnittsüberschriften hinzuzufügen. Vielen Dank für Ihre Antwort :) – blackjak231

+0

Ich habe meine Antwort geändert, um zu reflektieren, was ich denke, war Ihre Frage - Wenn Sie 100% sicher sind, dass das Array alphabetisch auf den Namen Wert sortiert ist, könnte es weiter optimiert werden, aber dies wird für 99 tun % der normalen Fälle :-) – Emptyless

+0

@ blackjak231 Dit it work for you? – Emptyless

Verwandte Themen