Нет смысла использовать Result
в Combine
, поскольку ваши Publisher
s всегда будут либо выдавать значение, либо завершаться с ошибкой. Они никогда не должны выдавать значение, которое содержит ошибку.
Как только вы избавитесь от использования Result
, ошибки go исчезнут.
func foo() -> AnyPublisher<[SomeData], DataError> {
...
}
func foo2() -> AnyPublisher<[SomeData], UIError> {
return foo()
.mapError { error -> UIError in
switch error {
...
}
return UIError.failed(error: error)
}
.eraseToAnyPublisher()
}
Либо с помощью Result
или в Publisher
, вам обычно не нужно использовать Optional
s, так как в случае ошибки просто не будет значения, нет необходимости возвращать значение nil
, в отличие от завершения обработчики.