我已经从 API 检索了一些 JSON 数据,现在有一个充满 NSDictionary 对象的 NSArray。每个 NSDictionary 都有一个“名称”的键/值对,我想按该键/值对对 NSArray 进行排序。
我已经做了很多搜索,但我遇到的解决方案似乎都不适用于新的 Swift 语言,我不确定这是否可能是一个错误......
我已经尝试过:
var descriptor: NSSortDescriptor = NSSortDescriptor(key: "name", ascending: true)
var sortedResults: NSArray = results.sortedArrayUsingDescriptors(NSSortDescriptor(key: "name", ascending: true))
但是这不会编译并提示“NSSortDescriptor 无法转换为 [AnyObject]”。
有什么建议吗?
您必须传递一组排序描述符(即使只有一个):
let descriptor = NSSortDescriptor(key: "name", ascending: true)
let sortedResults = results.sortedArray(using: [descriptor])
原始答案(我相信对于 Swift 1):
var descriptor: NSSortDescriptor = NSSortDescriptor(key: "name", ascending: true)
var sortedResults: NSArray = results.sortedArrayUsingDescriptors([descriptor])
与其采用旧的方式,为什么不拥抱新的方式呢? swift Array 类型同时具有
sort
和 sorted
方法。您可以提供一个闭包作为排序函数:
var sortedResults= results.sorted {
(dictOne, dictTwo) -> Bool in
// put your comparison logic here
return dictOne["name"]! > dictTwo["name"]!
}
var arrDescriptor = NSSortDescriptor(key: "", ascending: true)
var sortDescriptors: NSArray = [arrDescriptor]
_sortedArray = allKeysArray.sortedArrayUsingDescriptors(sortDescriptors as [AnyObject])
print(_sortedArray)