Выполнение
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
и т.д.