Сортировать массив в Swift
Для Swifty
Человек ниже - это очень чистая техника для достижения поставленной цели в глобальном масштабе. Давайте рассмотрим пример пользовательского класса User
, который имеет некоторые атрибуты.
class User: NSObject {
var id: String?
var name: String?
var email: String?
var createdDate: Date?
}
Теперь у нас есть массив, который нам нужно отсортировать на основе createdDate
по возрастанию и / или по убыванию. Итак, давайте добавим функцию для сравнения дат.
class User: NSObject {
var id: String?
var name: String?
var email: String?
var createdDate: Date?
func checkForOrder(_ otherUser: User, _ order: ComparisonResult) -> Bool {
if let myCreatedDate = self.createdDate, let othersCreatedDate = otherUser.createdDate {
//This line will compare both date with the order that has been passed.
return myCreatedDate.compare(othersCreatedDate) == order
}
return false
}
}
Теперь у нас есть extension
из Array
для User
. Проще говоря, давайте добавим некоторые методы только для тех массивов, которые содержат только User
объектов.
extension Array where Element: User {
//This method only takes an order type. i.e ComparisonResult.orderedAscending
func sortUserByDate(_ order: ComparisonResult) -> [User] {
let sortedArray = self.sorted { (user1, user2) -> Bool in
return user1.checkForOrder(user2, order)
}
return sortedArray
}
}
Использование по возрастанию
let sortedArray = someArray.sortUserByDate(.orderedAscending)
Использование по убыванию
let sortedArray = someArray.sortUserByDate(.orderedAscending)
Использование для того же заказа
let sortedArray = someArray.sortUserByDate(.orderedSame)
Вышеуказанный метод в extension
будет доступен, только если Array
имеет тип
[User]
|| Array<User>