Ordenar matriz en Swift
Para la Swifty
persona a continuación, es una técnica muy limpia para lograr el objetivo por encima de todo el mundo. Tengamos una clase personalizada de ejemplo de la User
cual tienen algunos atributos.
class User: NSObject {
var id: String?
var name: String?
var email: String?
var createdDate: Date?
}
Ahora tenemos una matriz que debemos clasificar en función de createdDate
ascendente y / o descendente. Entonces, agreguemos una función para la comparación de fechas.
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
}
}
Ahora tengamos un extension
de Array
para User
. En palabras simples, agreguemos algunos métodos solo para aquellos Array que solo tienen User
objetos.
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
}
}
Uso para orden ascendente
let sortedArray = someArray.sortUserByDate(.orderedAscending)
Uso para orden descendente
let sortedArray = someArray.sortUserByDate(.orderedAscending)
Uso para el mismo pedido
let sortedArray = someArray.sortUserByDate(.orderedSame)
El método anterior extension
solo será accesible si Array
es del tipo
[User]
||Array<User>