Прежде всего, когда вы делаете асинхронный вызов, не возвращайте результат, используйте вместо этого обработчик завершения
func fetchPages(_ completion: @escaping ([UIViewController]?) -> ()) {
fetchIntroPages() { result, error in
...
if let result = result {
if result.success {
...
completion(newColoredViewControllerArray)
return
}
}
}
completion(nil)
}
}
, затем не используйте переменную lazy
, поскольку вы не можете обеспечить возвратзначение, так как вы делаете асинхронный вызов.Если вам это нужно, используйте просто «обычную» сохраненную переменную
var orderedViewControllers: [UIViewController]?
Теперь, где вам это нужно, позвоните fetchPages
и в ее закрытии назначьте вашу переменную
fetchPages { viewControllers in
if let viewControllers = viewControllers { // if you don't want to change controllers if there was any error
self.orderedViewControllers = viewControllers
... // moment when you have `orderedViewControllers`
}
}