Ci-dessous est l'exemple d'utilisation de NSSortDescriptor
qui donne le même résultat que sortedByFirstNameSwifty
alors quel est le besoin de NSSortDescriptor
dans Swift?Quel est l'avantage de NSSortDescriptor sur la fonction Swift High?
class Person: NSObject {
let firstName: String
let lastName: String
let age: Int
init(firstName: String, lastName: String, age: Int) {
self.firstName = firstName
self.lastName = lastName
self.age = age
}
override var description: String {
return "\(firstName) \(lastName)"
}
}
let a = Person(firstName: "a", lastName: "b", age: 24)
let b = Person(firstName: "c", lastName: "d", age: 27)
let c = Person(firstName: "e", lastName: "f", age: 33)
let d = Person(firstName: "g", lastName: "h", age: 31)
let peopleObject = [d, b, a, c]
//SWIFTY
let sortedByFirstNameSwifty = peopleObject.sorted(by: { $0.firstName < $1.firstName })
print(sortedByFirstNameSwifty)//prints[a b, c d, e f, g h]
//Objective c way
let firstNameSortDescriptor = NSSortDescriptor(key: "firstName", ascending: true, selector: #selector(NSString.localizedStandardCompare(_:)))
let sortedByFirstName = (peopleObject as NSArray).sortedArray(using: [firstNameSortDescriptor])
print(sortedByFirstName)//prints [a b, c d, e f, g h]
Pas tellement dans Swift où 'trié (par:)' est rapide à implémenter. Mais l'un de ses avantages est de trier avec CoreData, en faisant le tri dans la requête et non après. – Larme
Pour un tri hiérarchique (par exemple tri par nom de famille, puis par prénom), vous pouvez utiliser un tableau de descripteurs de tri. La fermeture de tri correspondante est un peu plus de travail. - D'autre part, les descripteurs de tri ne peuvent être utilisés qu'avec NSObjects. –
@MartinR merci, est-ce bon d'inclure '(peopleObject as NSArray)' cast dans SWIFT? – Jack