Проверить тип generi c Combine Publisher Output Swift - PullRequest
0 голосов
/ 06 августа 2020

У меня есть функция доступа к данным с моего сервера. Сервер может вернуть объект 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?

Спасибо

1 Ответ

0 голосов
/ 07 августа 2020

Хорошо, я понял, как мне решить свою проблему, это на самом деле не отвечает на исходный вопрос, однако эта ссылка по большей части решает его.

Решение, которое я в конечном итоге использовался для проверки кода состояния моей задачи с данными, прежде всего. Мой код на стороне сервера был настроен так, что код состояния будет 200, когда был отправлен первый JSON, и 500, если был отправлен второй JSON. Это означало, что я мог просто декодировать второй JSON раньше, если код состояния показал, что он будет отправлен.

Спасибо за вашу помощь

...