В приложении чата, над которым я работаю, мне нужно отправить телефонные номера, полученные из контактов в API, и получить номера, которые уже зарегистрированы в приложении.Вызвать замыкание рекурсивно
Поскольку списки контактов могут быть очень длинными, я планирую отправлять номера телефонов в партиях (по запросу). И обновите пользовательский интерфейс в соответствии с каждым возвращенным ответом.
private(set) var registeredContacts: [RegContact] = []
let phoneNumbersInBatches: [[String]] = [[]]
for batch in phoneNumbersInBatches {
ApiClient.sharedInstance.getRegisteredContacts(from: batch) { contacts, error in
// Saving to database
// Update the UI
// ...
self.registeredContacts += contacts
}
}
Я хочу отправить каждую партию один за другим. Другими словами, вот как я хочу, чтобы процесс прошел.
Отправить партию -> получить ответ -> обновить пользовательский интерфейс (если есть зарегистрированные пользователи) -> Отправить следующую партию -> ...
Но с getRegisteredContacts
быть замыканием, петля for
просто отправляет все запросы один за другим, не дожидаясь завершения предыдущего запроса.
Как я могу заставить его ждать и запускать каждый последующий запрос после завершения предыдущего запроса?
Синхронные редко бывает хорошая идея. Вы должны посмотреть на NSOperationQueue. – Paulw11