使用 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
is a Struct
not a Class
。我也尝试将元素类型转换为[String: Any]
,但无论使用类型为[String: AnyObject]
或的字典,它都不起作用[String: String]
。
是否有任何转换可以用来支持具有键类型String
和任何值类型(String
等AnyObject
)的字典,或者可以添加到扩展中以避免完全转换的 where 子句或协议一致性?
编辑:这是根据请求的两个示例数组
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())