2014-07-06 15 views
16

Załóżmy, że mamySortuj tablicę słowników w Swift

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

Przy próbie sortowania tablicy przy użyciu

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

Xcode mówi „nie można znaleźć członek indeks”.

Jak sortować tablicę takich słowników według wartości w określonym kluczu?

Odpowiedz

42

Komunikat o błędzie jest mylący. Prawdziwy problem polega na tym, że kompilator Swift robi nie wie, jaki typ obiektu jest $0["lastModified"] i jak je porównać.

Więc trzeba być nieco bardziej wyraźne, na przykład

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

jeśli znaczniki czasu są liczb zmiennoprzecinkowych lub

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

jeśli znaczniki czasu są NSDate obiekty.

1

W tym miejscu problem polega na tym, że kompilator nie może zrozumieć typu tego, co z obiektu $ 0 ["lastModified"].

jeśli znaczniki czasu są liczb zmiennoprzecinkowych: -

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