Быстрая сортировка массива типов объектов по дате - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть объекты массива, каждый из которых содержит хотя бы один ключ даты типа Date

let arrayOfObjects: [Any] = [
    Cartoon(name: "Ben Ten", dateReleased: Date()),
    Milestone(dateReleased: Date()),
    Phone(color: "Black", dateReleased: Date())
]

У меня есть такой массив, но с весом более смешанных типов данных объектов.Все, что я хочу, это отсортировать этот массив объектов в порядке возрастания в соответствии с dateReleased, например, в порядке возрастания.

Любая помощь будет оценена

1 Ответ

0 голосов
/ 08 февраля 2019

Вы можете определить protocol, требующий один Date объект, и сделать все ваши типы, которые вы хотите отсортировать, соответствующими этому протоколу.Затем вам нужно объявить массив как [Released], а затем просто вызвать sorted для него.

protocol Released {
    var dateReleased: Date { get }
}

struct Cartoon: Released {
    let name:String
    let dateReleased: Date
}

struct Milestone: Released {
    let dateReleased: Date
}

struct Phone: Released {
    let color:String
    let dateReleased: Date
}

let arrayOfObjects: [Released] = [
    Cartoon(name: "Ben Ten", dateReleased: Date()),
    Milestone(dateReleased: Date()),
    Phone(color: "Black", dateReleased: Date())
]

let sortedObjects = arrayOfObjects.sorted(by: {$0.dateReleased < $1.dateReleased})
...