У меня есть функция доступа к данным с моего сервера. Сервер может вернуть объект JSON типа Player
:
{"id":"6B38EF76-6BBC-4423-BCB6-FD9F9B5E7A6F","ign":"Shard","region":"eu","rating":1000}
или типа Standard Response
:
{"statusCode":4,"description":"Invalid Arguments"}
У меня есть функция со следующим шаблоном:
fetch<T: Decodable>(from endpoint: Endpoint) -> AnyPublisher<T, DatabaseError>
Эта функция обращается к серверу через издателя задачи данных и декодирует результат в обобщенный c T с помощью встроенного в комбайн оператора декодирования:
.decode(type: T.self, decoder: JSONDecoder())
У меня есть два типы ответов, которые я показал выше, смоделированы как структуры с соответствующими ключами кодирования et c, и эта часть кода работает нормально.
Я использую функцию выборки внутри другой функции, которая передает ей соответствующую конечную точку
func getPlayerDetails(of id: UUID) -> AnyPublisher<Player, DatabaseError> {
return fetch(from: .getDetails(of: id, isTeam: false))
}
Как видите, эта функция возвращает издателя с Player
в качестве вывода. Мой вопрос: как я могу проверить общий c вывод fetch(from:)
, и если это объект игрока, передать его, а если не вернуть мою пользовательскую ошибку DatabaseError
?
Спасибо