Я следую шаблону в своем коде Rx, у меня обычно есть триггер Observable, который я использую для создания другого Observable для сетевого запроса. Упрощенный пример:
enum ViewModelError: Error {
case bang
}
enum DataTaskError: Error {
case bang
}
func viewModel(trigger: Observable<Void>,
dataTask: Observable<Result<SomeType, DataTaskError>>) -> Observable<Result<AnotherType, ViewModelError>> {
let apiResponse = trigger
.flatMap { dataTask }
}
Эквивалент комбината У меня возникли некоторые проблемы. Я мог бы использовать Result как тип Output и использовать Never как тип Failure, но это похоже на неправильное использование API.
func viewModel(trigger: AnyPublisher<Void, Never>,
dataTask: AnyPublisher<SomeType, DataTaskError>) -> AnyPublisher<AnotherType, ViewModelError> {
let apiResponse = trigger
.flatMap { dataTask }
}
Я получаю ошибку компиляции:
Instance method 'flatMap(maxPublishers:_:)' requires the types 'Never' and 'DataTaskError' be equivalent
Я мог бы использовать mapError и привести обе ошибки к Error, но мне нужно DataTaskError, чтобы иметь возможность создать мой ViewModelError.
Такое ощущение, что это не должно быть так сложно, и это кажется довольно распространенным явлением. случай использования. Я, вероятно, просто неправильно понимаю некоторые основные принципы, и точка в правильном направлении будет принята с благодарностью.