在Swift中对NSDictionary对象的NSArray进行排序

jop*_*eek 11 arrays sorting dictionary ios swift

我从API中检索了一些JSON数据,现在有一个NSArray充满了NSDictionary对象.每个NSDictionary都有一个键/值对"name",我想通过该键/值对对NSArray进行排序.

我已经做了很多搜索,但我遇到的解决方案似乎都没有使用新的Swift语言,我不确定它是否可能是一个bug或者不...

我试过了:

var descriptor: NSSortDescriptor = NSSortDescriptor(key: "name", ascending: true)
var sortedResults: NSArray = results.sortedArrayUsingDescriptors(NSSortDescriptor(key: "name", ascending: true))
Run Code Online (Sandbox Code Playgroud)

但这不会编译声明"NSSortDescriptor不能转换为[AnyObject]".

有什么建议?

kam*_*ala 32

你必须传递一系列排序描述符(即使它只是一个):

var descriptor: NSSortDescriptor = NSSortDescriptor(key: "name", ascending: true)
var sortedResults: NSArray = results.sortedArrayUsingDescriptors([descriptor])
Run Code Online (Sandbox Code Playgroud)


Col*_*inE 12

而不是以旧的方式做到这一点,为什么不拥抱新的?雨燕数组类型既有sort和sorted方法.您可以提供闭包作为sort函数:

var sortedResults= results.sorted {
  (dictOne, dictTwo) -> Bool in 
  // put your comparison logic here
  return dictOne["name"]! > dictTwo["name"]!
}
Run Code Online (Sandbox Code Playgroud)

  • 或者,这可以在一行上完成:`var sortedResults = results.sorted {$ 0 ["name"]!> $ 1 ["名字"]!}` (3认同)