#swift #multithreading #asynchronous
#swift #многопоточность #асинхронный
Вопрос:
В одном из проектов, над которыми я работаю, я планирую несколько уведомлений для разных элементов в моей базе данных. Вот некоторый код :
func setupNotifications() {
for medecine in medecineList! {
if !medecine.whichDaysArray.contains(Medecine.Days.EveryDay.rawValue) {
for day in medecine.whichDaysArrayDate {
for fTime in medecine.frequencyTimeDateArray {
self.createNotificationsForUniqueDays(parsedMedecine: medecine, parsedDay: day, parsedFTime: fTime)
}
}
}
else {
for fTime in medecine.frequencyTimeDateArray {
self.createNotificationsForEveryDay(parsedMedecine: medecine, parsedFTime: fTime)
}
}
}
self.callback()
}
func createNotificationsForEveryDay(parsedMedecine: Medecine, parsedFTime: Date) {
DispatchQueue.main.async {
// Create the notification
}
}
Как вы можете видеть, я намеренно поместил функцию, которая обрабатывает создание уведомлений в асинхронном потоке. Проблема в том, что я хотел бы вызывать метод callback()
, когда каждая асинхронная задача закончит выполнять свою работу. Я понятия не имею, как этого добиться.
Любая помощь приветствуется, спасибо!
Ответ №1:
Метод createNotificationsForEveryDay
должен иметь блок в качестве параметра. В этом блоке я бы проверил, обработал ли я последний элемент в frequencyTimeDateArray
, и если бы я это сделал, я бы вызвал self.callback()
.
Комментарии:
1. К сожалению, я не могу этого сделать. Потому что, как вы можете видеть, у меня есть несколько циклов. Один элемент в frequencyTimeDateArray может использоваться много раз в зависимости от того, сколько элементов имеется в whichDatesArray. И я не могу использовать эту логику для этого последнего массива, потому что перед этим есть предложение else / if. В конце я хочу, чтобы моя функция обратного вызова могла извлекать все ожидающие уведомления.