Как отсортировать массив UNNotificationRequests по nextTriggerDate
У меня есть массив UNNotificationRequest
, Я хочу отсортировать их по nextTriggerDate
,
Насколько я понимаю, я бы отсортировал массив с помощью array.sorted(by:predicate)
let sortedNotifications = notificationRequests.sorted(by:
{ $0.trigger.nextTriggerDate?.compare($1.trigger.nextTriggerDate!) == .orderedAscending })
Однако проблема в том, .trigger
не имеет nextTriggerDate
имущество.
Чтобы получить nextTriggerDate
Я должен извлечь триггер и бросить его в UNCalendarNotificationTrigger
, Что, насколько я знаю, не может быть сделано в предикате.
Какие-нибудь мысли?
1 ответ
Решение
Вы можете создать Tuple
С UNNotificationRequest и nextTriggerDate (UNNotificationRequest,nextTriggerDate)
// get request with date Tuple --> example : (value0,value1)
let requestWithDateTuple = notificationRequests.map({ (req) -> (UNNotificationRequest,Date?)? in
guard let trigger = req.trigger as? UNCalendarNotificationTrigger else {
return nil
}
return (req,trigger.nextTriggerDate())
}).compactMap({$0})
// you will get Tuple (request,Date) ,sort them by date
let sortedTuple = requestWithDateTuple.sorted(by: { $0.1?.compare($1.1!) == .orderedAscending })
// sorted request only
let requestSorted = sortedTuple.map({$0.0})