У меня есть пользовательское представление, которое будет отображаться в представлении коллекции. Представление будет добавлено в виде стека, встроенного в контроллер представления. Метод источника данных предоставляется для предоставления объекта представления.
Теперь вот проблема, прежде чем добавить свой пользовательский вид в стек, мне нужно сначала сделать вызов шлюза, чтобы проверить, разрешено ли отображать вид или нет.
Поскольку вызов шлюза является асинхронным и возвращает ответ в обратном вызове. Основываясь на обратном вызове, мне нужно создать экземпляр представления и вернуться к предоставленному обратному вызову источника данных.
Вот демонстрационный код только для лучшего понимания. Прости меня за мои ужасные соглашения об именах.
func customeViewInStack(customView: UIView) -> [UIView]? {
if viewIsAllowedToBeDisplayed {
self.downloadViewContent(onCompletionHandler: { contentDownloadSuccessfull in
if contentDownloadSuccessfull
// Return new instance of my custom view
else
// return nil
})
}
return nil
}
Все предложения, которые я прочитал, касались использования замыкания для передачи значения, но из-за метода источника данных и обратного вызова в вызове шлюза мне нужно использовать инструкцию возврата старой моды.
Редактировать 1
Я обновил фрагмент кода для лучшего понимания.
Я не могу изменить сигнатуру функции, поскольку она является частью фреймворка и метода источника данных.
Также этот метод разделяется между различными функциями. Под этим я подразумеваю, что различные представления будут добавляться в виде стека, и у них есть свои собственные условные проверки, добавлять их или нет.
Таким образом, в основном то, что я пытаюсь достичь, - до тех пор, пока я не получу ответ от операции шлюза, выполнение программы не должно продолжаться.
Я пытался использовать класс DispatchGroup, но не смог достичь своей цели.
Может кто-нибудь подсказать мне, как мне решить эту проблему
Спасибо