This code uses RxSwift
import RxSwift
struct Input {
let loadTrigger: Observable<Void>
}
protocol UseCase {
func getEventsLists() -> Observable<[EventsList]>
func saveEventsList(eventsList: EventsList) -> Observable<Void>
}
struct Event {
let creationDate: Date
}
struct EventsList {
let events: [Event]
}
var tempEventsList: EventsList? = nil
func example(useCase: UseCase, input: Input, disposeBag: DisposeBag) {
let events = input.loadTrigger
.flatMapLatest {
useCase.getEventsLists()
.map { $0.first }
.do(onNext: { eventsList in
if eventsList == nil {
let eventsList = EventsList(events: [])
useCase.saveEventsList(eventsList: eventsList)
.subscribe(onNext: {
tempEventsList = eventsList
})
.disposed(by: disposeBag)
} else {
tempEventsList = eventsList
}
})
.map { $0?.events ?? [] }
.asDriverOnErrorJustComplete()
}
}
In my iOS App I can create events to show how much is left to the established date. Every event has their creation date. The events are sorted by the last created (I can change the order manually), so the widget also shows the last created event (I can change the event to show manually).
I would like the list of events to be automatically sorted in chronological order, from newest to oldest.