Swift 2.1 を使用して、辞書の配列をキー dateKey の日付値でソートする関数を作成しようとしています。
これを Array 型の拡張として追加したいので、次を使用して呼び出すことができますsomeArray.sortDictionariesByDate(dateKey: String, dateFormatter: NSDateFormatter)
extension Array where Element: CollectionType {
mutating func sortDictionariesByDate(dateKey: String, dateFormatter: NSDateFormatter) {
sortInPlace {
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
if let dateStringA: String = ($0 as? [String: AnyObject])?[dateKey] as? String, let dateStringB = ($1 as? [String: AnyObject])?[dateKey] as? String {
if let dateA: NSDate = dateFormatter.dateFromString(dateStringA), dateB: NSDate = dateFormatter.dateFromString(dateStringB) {
return dateA.compare(dateB) == .OrderedAscending
}
}
return false
}
}
}
これは、辞書の型が である限り問題なく動作しますが[String: AnyObject]
、型の辞書で使用すると、にキャストできないため機能し[String: String]
ません。これは がではないためだと思います。代わりに要素を型キャストしようとしましたが、型または型の辞書を使用しても機能しません。String
AnyObject
String
Struct
Class
[String: Any]
[String: AnyObject]
[String: String]
キーの型String
と任意の値の型 (など) を持つ辞書をサポートするために使用できるキャストString
、AnyObject
または完全にキャストを回避するために拡張機能に追加できる where 句またはプロトコルの適合性はありますか?
編集:リクエストごとに2つの例の配列を次に示します
var sampleArray1: [[String: AnyObject]] = [["date": "2015-10-24T13:00:00.000Z", "foo": "bar"], ["date": "2015-10-24T14:00:00.000Z", "foo": "bar"]]
sampleArray1.sortDictionariesByDate("date", dateFormatter: NSDateFormatter())
var sampleArray2: [[String: String]] = [["date": "2015-10-24T13:00:00.000Z", "foo": "bar"], ["date": "2015-10-24T14:00:00.000Z", "foo": "bar"]]
sampleArray2.sortDictionariesByDate("date", dateFormatter: NSDateFormatter())