Выполнение
HTTP запросов — это один из самых важных навыков, которые необходимо получить при разработке
iOS приложений. В более ранних версиях
Swift (до версии 5) вне зависимости от того, формировали ли вы эти запросы «с нуля» или с использование известного фреймворка
Alamofire, вы в конечном итоге получали сложный и запутанный код с
callback типа
completionHandler: @escaping(Result<T, APIError>) -> Void.
Появление в
Swift 5 нового фреймворка функционального реактивного программирования
Combine в сочетании с уже существующими
URLSession и
Codable предоставляет вам все необходимые инструменты для самостоятельного написания очень компактного кода для выборки данных из интернета.
В этой статье в соответствии с концепцией
Combine мы будем создавать «издателей»
Publisher для выборки данных из интернета, на которые в дальнейшем сможем легко «подписаться» и использовать при проектировании
UI как с помощью
UIKit, так и с помощью
SwiftUI.
В
SwiftUI это выглядит более лаконично и более эффектно, так как действие «издателей»
Publisher не ограничивается просто выборкой данных, а простирается дальше, вплоть до управления пользовательским интерфейсом (
UI). Дело в том, что в
SwiftUI разделение данных и
View осуществляется с помощью
ObservableObject классов с
@Published свойствами, изменения которых
SwiftUI АВТОМАТИЧЕСКИ отслеживает и полностью «перерисовывает» свои
View.
В эти
ObservableObject классы можно очень просто заложить определенную бизнес-логику приложения, если некоторые из этих
@Published свойств являются результатом синхронных и/ или асинхронных преобразований других
@Published свойств, которые можно напрямую менять такими «активными» элементами пользовательского интерфейса (
UI) как текстовые поля
TextField,
Picker,
Stepper,
Toggle и т.д.