2014-07-06 18 views
16

wir haben AngenommenSortierung ein Array von Wörterbüchern in Swift

var filesAndProperties:Dictionary<String, Any>[]=[] //we fill the array later 

Wenn ich versuche, das Sortieren des Array mit

filesAndProperties.sort({$0["lastModified"] > $1["lastModified"]}) 

Xcode sagt: "Mitglied der Index nicht finden konnte".

Wie kann ich eine Reihe solcher Wörter Werte in einem bestimmten Schlüssel sortieren?

Antwort

42

Die Fehlermeldung ist irreführend. Das eigentliche Problem ist, dass der Swift-Compiler nicht weiß, welcher Objekttyp $0["lastModified"] ist und wie man sie vergleicht.

Also muss man ein bisschen mehr explizit sein, zum Beispiel

filesAndProperties.sort { 
    item1, item2 in 
    let date1 = item1["lastModified"] as Double 
    let date2 = item2["lastModified"] as Double 
    return date1 > date2 
} 

wenn die Zeitstempel Gleitkommazahlen sind, oder

filesAndProperties.sort { 
    item1, item2 in 
    let date1 = item1["lastModified"] as NSDate 
    let date2 = item2["lastModified"] as NSDate 
    return date1.compare(date2) == NSComparisonResult.OrderedDescending 
} 

wenn die Zeitstempel NSDate Objekte sind.

1

Hier ist das Problem, dass der Compiler Typ nicht verstehen kann, was von Objekt $ 0 ["lastModified"] ist.

wenn die Zeitstempel sind Gleitkommazahlen: -

filesAndProperties = filesAndProperties.sorted(by: { 
       (($0 as! Dictionary<String, AnyObject>)["lastModified"] as? Double)! < (($1 as! Dictionary<String, AnyObject>)["lastModified"] as? Double)! 
      }) 
Verwandte Themen