web-dev-qa-db-fra.com

Triez NSArray des objets NSDictionary dans Swift

J'ai récupéré des données JSON à partir d'une API et j'ai maintenant un tableau NSArray contenant des objets NSDictionary. Chaque NSDictionary a une paire clé/valeur de "nom" et je souhaite trier le NSArray en fonction de cette paire clé/valeur.

J'ai fait pas mal de recherches, mais aucune des solutions que j'ai rencontrées ne semble fonctionner dans la nouvelle langue de Swift et je ne sais pas s'il s'agit ou non d'un bug ...

J'ai essayé:

var descriptor: NSSortDescriptor = NSSortDescriptor(key: "name", ascending: true)
var sortedResults: NSArray = results.sortedArrayUsingDescriptors(NSSortDescriptor(key: "name", ascending: true))

Mais cela ne compilera pas en indiquant "NSSortDescriptor n'est pas convertible en [AnyObject]".

Aucun conseil?

11
jopeek

vous devez passer un tableau de descripteurs de tri (même s'il n'en est qu'un):

var descriptor: NSSortDescriptor = NSSortDescriptor(key: "name", ascending: true)
var sortedResults: NSArray = results.sortedArrayUsingDescriptors([descriptor])
31
kambala

Plutôt que de faire cela à l'ancienne, pourquoi ne pas adopter le nouveau? Le type Swift Array a les deux méthodes sort et sorted. Vous pouvez fournir une fermeture en tant que fonction de tri:

var sortedResults= results.sorted {
  (dictOne, dictTwo) -> Bool in 
  // put your comparison logic here
  return dictOne["name"]! > dictTwo["name"]!
}
12
ColinE
var arrDescriptor = NSSortDescriptor(key: "", ascending: true)
   var sortDescriptors: NSArray = [arrDescriptor]
   _sortedArray = allKeysArray.sortedArrayUsingDescriptors(sortDescriptors as [AnyObject])

   print(_sortedArray)
0
Ankit Goyal