У меня есть проблема с дизайном прямо сейчас. Я пишу Swift App, у которого есть раскадровка с несколькими ViewControllers и класс HTTPRequests, который выполняет запросы GET и POST в RESTful Webservice.Asynchronus HTTP Request return Значение в Swift
Моя проблема прямо сейчас следующая. С контроллера представления я должен выполнить запрос GET в Webservice для извлечения данных. Полученные данные должны отображаться через этот контроллер представления на конкретном представлении. Я вижу две возможности, чтобы достичь этого прямо сейчас:
Поместите функцию запроса в ViewController. Выполните запрос asynchronus и обновите представление в этой задаче asynchronus, как только будут получены данные. Мне не нравится этот подход по двум причинам. Во-первых, я не хочу функцию Request внутри ViewController, потому что мне нужна такая же функция в нескольких ViewControllers, и это приводит к дублированию кода. Во-вторых, я не хочу обновлять представление внутри задачи asynchronus.
Поместите функцию запроса в класс HTTPRequests (Singleton). Вызовите запросы из ViewController и получите возвращаемое значение обратно. С помощью этого значения ViewController может обновить свое представление. Мне нравится этот подход, потому что он в дизайне касается «чище». Моя единственная проблема - это возвращаемое значение. Как я могу вернуть значение из задачи асинхронов в Swift? Если возможно, пожалуйста, используйте примеры кода.
Или есть лучший подход, чем эти два?
Edit: Благодаря вашим ответам и this Blog Post я мог бы успешно реализовать подход 2 с делегатами.
Вы должны использовать подход 2 с шаблоном делегата. – Paulw11
Если у вас достаточно много времени, чтобы изучить их, я настоятельно рекомендую использовать для этого цель «Будущее/обещание» или «FRP» на функциональном языке. – findall
Спасибо за подсказки. Я новичок в программировании на iOS, поэтому мне нужно научиться разбираться с делегатами. В этом случае я также посмотрю на Futures, я знаю их уже немного от Java. –