2014-07-10 22 views
11

Ich habe einige JSON-Daten aus einer API abgerufen und jetzt ein NSArray voller NSDictionary-Objekte. Jedes NSDictionary hat ein Schlüssel/Wert-Paar von "name" und ich möchte das NSArray nach diesem Schlüssel/Wert-Paar sortieren.Sortieren NSArray von NSDictionary-Objekten in Swift

ich getan habe ziemlich viel gesucht, aber keine der Lösungen ich kenne scheint in der neuen Swift Sprache zu arbeiten und ich bin nicht sicher, ob es möglicherweise ein Fehler oder nicht ...

ich habe versucht:

var descriptor: NSSortDescriptor = NSSortDescriptor(key: "name", ascending: true) 
var sortedResults: NSArray = results.sortedArrayUsingDescriptors(NSSortDescriptor(key: "name", ascending: true)) 

Aber das wird nicht kompilieren Angabe "NSSortDescriptor nicht konvertierbar ist [ANYOBJECT]".

Irgendwelche Ratschläge?

+2

Lesen Sie, was der Fehler sagt: es ist ein Array erwartet ... – slazyk

Antwort

30

Sie eine Reihe von Art Deskriptoren passieren müssen (auch wenn es nur eine ist):

var descriptor: NSSortDescriptor = NSSortDescriptor(key: "name", ascending: true) 
var sortedResults: NSArray = results.sortedArrayUsingDescriptors([descriptor]) 
+1

Mit Xcode 6.1 gibt mir ein $ T7 ‚Kann der Ausdruck des Typs nicht konvertieren‘? ? Geben Sie 'NSSortDescriptor' ein, weil ich das NSArray so definiert habe var valores = NSMutableArray (contentsOfFile: Datei) Irgendwelche Ratschläge bitte? Jede Hilfe wird sehr willkommen sein –

+0

Großartig! Das einzige Beispiel funktioniert nach der Suche nach 2 Tagen! Danke vielmals. – RikiRiocma

+0

Wenn Sie dies in Objective-C haben -> NSArray * array = [[Wörterbuch allKeys] sortedArrayUsingSelector: @selector (vergleichen :)]; Jeder kennt die Alternative in Swift? – Markus

12

Vielmehr dies die alte Art und Weise tun, als, warum die neuen nicht umarmen? Der schnelle Array-Typ hat beide sort und sorted Methoden. Sie können eine Schließung als Sortierfunktion liefern:

var sortedResults= results.sorted { 
    (dictOne, dictTwo) -> Bool in 
    // put your comparison logic here 
    return dictOne["name"]! > dictTwo["name"]! 
} 
+3

Alternativ kann dies in einer Zeile erfolgen: 'var sortedResults = results.sorted {$ 0 [" name "]! > $ 1 ["Name"]! } ' –

+0

Es kann in der Tat, aber ich rate das OP ist ein wenig neu zu Swift, also entschied ich mich für eine ausführlichere Schließung Syntax! – ColinE

+0

Ich bin in der Tat neu zu Swift und ich habe das früher versucht, aber es konnte nicht funktionieren. Ich denke, ich sehe, was ich vermisst habe und werde später noch eine Antwort geben. Vielen Dank! – jopeek

0
var arrDescriptor = NSSortDescriptor(key: "", ascending: true) 
    var sortDescriptors: NSArray = [arrDescriptor] 
    _sortedArray = allKeysArray.sortedArrayUsingDescriptors(sortDescriptors as [AnyObject]) 

    print(_sortedArray) 
Verwandte Themen