Я создаю приложение для iOS в Swift, и я пытаюсь сохранить логику API API за пределами моих ViewControllers. Я последовал за this tutorial за 1 вызов API, о котором я расскажу ниже.Реализация нескольких вызовов API (запросы сервера) с использованием протоколов
Я создаю протокол «APIControllerProtocol», который будет реализовывать ViewController, а затем я создаю класс APIController, который будет содержать свойство «делегат» для хранения экземпляра типа APIControllerProtocol. Протокол просто определяется как
protocol APIControllerProtocol {
func didReceiveAPIResults(result: SwiftyJSON.JSON)
}
И ViewController будет осуществлять didReceiveAPIResults функцию, которая будет вызвана после вызова API возвращает данные в формате JSON. ViewController будет содержать экземпляр APIController, а также вызвать функцию, которая вызывает вызов API.
На данный момент я хочу, чтобы больше ViewControllers выполняло вызовы API, и если мне нужно всего лишь сделать 1 вызов API на ViewController, я могу просто добавить еще одну функцию в APIController, и я могу использовать новый ViewController тот же протокол , Однако эта логика ошибочна, если есть ViewController, что нужно будет сделать 2 или более API вызовов, потому что
- Я не могу назвать didReceiveAPIResults в ViewController 2 различными способами,
Я не думаю, добавление нескольких свойств «делегата» в класс APIController для хранения различных типов протоколов - путь.
Определение нескольких функций в протоколе означало бы, что я должен был бы реализовать все эти функции в ViewControllers, которые должны выполнять только 1 вызов API.
Мои идеи для решения этой проблемы являются
сделать класс APIController и APIControllerProtocol для каждого ViewController
использования дополнительных функций в APIControllerProtocol так не каждый ViewController бы реализовать все (я не знаю, как это действительно работает)
Любые другие идеи будут оценены.
Да, вызов API здесь означает запрос сервера. Какая польза от конструкции закрытия над дизайном протокола? Я не понимаю, что важно поддерживать список запросов? Не могли бы вы предоставить код или ссылку на учебник, чтобы показать мне, как закрытие будет использоваться для запросов сервера? – hoffware
Похоже, вы хотите иметь класс, который управляет несколькими запросами сервера. Делегаты - это отношения «один к одному». Каждый объект диспетчера сервера может иметь только один и только один делегат. Таким образом, вы не можете обрабатывать ожидающие запросы от 3 разных контроллеров. С блоками завершения вы можете. –
Вместо того, чтобы изобретать колесо, вы можете взглянуть на такие библиотеки, как AFNetworking. Этот, в частности, очень богатый и зрелый, с множеством отличных функций, и тысячи разработчиков используют его. Он делает то, что мы говорим очень хорошо. –