Любые данные, предоставленные сервером, будут преобразованы в объект «response» из dataTaskPublisher. Шаблон, который вы обычно используете перед отправкой этих данных подписчику .assign()
или .sink()
, зависит в основном от вашего кода.
Я предпочитаю использовать здесь оператор tryMap()
, который позволяет вам проверять объект ответа,и потенциально преобразует такие вещи, как ответ 404 (который не является состоянием сбоя в конвейере объединения) в сбой. После этого общий шаблон берет данные и запускает их в оператор .decode()
для возврата структурированного объекта.
Затем вы можете выбрать способ обработки ошибки - наиболее распространенное решение, которое естьиспользуя .catch()
, чтобы заменить значение от издателя тем значением по умолчанию, которое вы хотите отобразить.
Основная деталь использования этого может быть примерно такой:
let remoteDataPublisher = URLSession.shared.dataTaskPublisher(for: myURL!)
.tryMap { data, response -> Data in
guard let httpResponse = response as? HTTPURLResponse,
httpResponse.statusCode == 200 else {
throw TestFailureCondition.invalidServerResponse
}
return data
}
.decode(type: PostmanEchoTimeStampCheckResponse.self, decoder: JSONDecoder())
это изпример на https://heckj.github.io/swiftui-notes/#patterns-datataskpublisher-trymap, часть бесплатной онлайн-справки Использование Combine .
(там также есть более подробная информация об использовании catch () для устранения ошибки из dataTaskPublisher наhttps://heckj.github.io/swiftui-notes/#patterns-oneshot-error-handling)