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?
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])
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"]!
}
var arrDescriptor = NSSortDescriptor(key: "", ascending: true)
var sortDescriptors: NSArray = [arrDescriptor]
_sortedArray = allKeysArray.sortedArrayUsingDescriptors(sortDescriptors as [AnyObject])
print(_sortedArray)