将给定的发布者故障类型设置为"从不合并"



有没有办法将给定的AnyPublisher<AnyType, SomeError>转换为AnyPublisher<AnyType, Never>

错误类型为Never的发布者意味着它根本无法引发错误。它将始终提供价值。

要获得永远不会引发错误的发布者,您有 2 种解决方案:

1/捕获所有可能的错误:

let publisher: AnyPublisher<AnyType, SomeError> = //...
publisher.catch { error in
// handle the error here. The `catch` operator requires to
// return a "fallback value" as a publisher
return Just(/* ... */) // as an example
}

2/如果您确定发布者不会抛出任何错误,则可以使用.assertNoFailure(),这将转换您的发布者。请注意,这是通过.assertNoFailure()的错误,您的应用程序将立即崩溃。

使用replaceError运算符。这要求您发出一个 AnyType 值,如果错误从上游到达,该值将从此点沿管道向下发送。

例如:

URLSession.shared.dataTaskPublisher(for: url)
.map {$0.data} // *
.replaceError(with: Data()) // *
// ...

从这一点开始,我们可以保证从数据任务完成或(如果存在网络错误(接收空数据。从现在开始,管道的"故障"类型为"从不"。

最新更新