0
以下是NSSortDescriptor
的使用範例,它給出了與sortedByFirstNameSwifty
相同的結果,那麼在Swift中什麼需要NSSortDescriptor
?NSSortDescriptor優於快速高階函數的優點是什麼?
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]
在'sort(by:)'快速實現的Swift中沒有那麼多。但它的一個優點是關於使用CoreData進行排序,在請求內部進行排序,而不是在排序之後。 – Larme
對於分層排序(例如按姓氏排序,然後按名字排序),可以使用排序描述符數組。相應的排序關閉是一個稍微多一點的工作。另一方面,排序描述符只能用於NSObjects。 –
@MartinR謝謝,是否包含在SWIFT中的'(peopleObject as NSArray)'很好? – Jack