2014-07-06 64 views
16

數組假設我們有排序字典的斯威夫特

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

當我嘗試整理使用

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

Xcode中說:「找不到成員標」的陣列。

如何按特定鍵中的值對這些詞典的數組進行排序?

回答

42

錯誤消息是誤導性的。真正的問題是Swift編譯器 不知道什麼類型的對象$0["lastModified"]是以及如何比較它們。

所以,你必須更明確一點,例如

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

如果時間戳是浮點數,或

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

如果時間戳NSDate對象。

1

這裏,問題是編譯器無法理解對象$ 0 [「lastModified」]是什麼類型。

如果時間戳是浮點數: -

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