Ios 在联合收割机中将给定的发布服务器故障类型设置为“从不”
是否有一种方法可以将给定的Ios 在联合收割机中将给定的发布服务器故障类型设置为“从不”,ios,swift,frp,combine,Ios,Swift,Frp,Combine,是否有一种方法可以将给定的AnyPublisher转换为AnyPublisher?将Never作为错误类型的发布者意味着它根本不能抛出错误。它总是能带来价值 要获得一个永远不会抛出错误的发布者,您有两种解决方案: 1/捕获所有可能的错误: let publisher:AnyPublisher=/。。。 publisher.catch{中出现错误 //在此处处理错误。“catch”运算符需要 //作为发布者返回“回退值” 仅返回(//*…*/)//作为示例 } 2/如果您确定发布服务器不会抛出错
AnyPublisher
转换为AnyPublisher
?将Never
作为错误类型的发布者意味着它根本不能抛出错误。它总是能带来价值
要获得一个永远不会抛出错误的发布者,您有两种解决方案:
1/捕获所有可能的错误:
let publisher:AnyPublisher=/。。。
publisher.catch{中出现错误
//在此处处理错误。“catch”运算符需要
//作为发布者返回“回退值”
仅返回(//*…*/)//作为示例
}
2/如果您确定发布服务器不会抛出错误,则可以使用将转换发布服务器的
.assertNoFailure()
。请注意,如果通过.assertNoFailure()
传递错误,您的应用程序将立即崩溃。请使用replaceError
操作符。这要求您发出一个AnyType值,如果上游出现错误,该值将从此点沿管道向下发送
例如:
URLSession.shared.dataTaskPublisher(for: url)
.map {$0.data} // *
.replaceError(with: Data()) // *
// ...
从这一点开始,我们就可以保证接收到来自数据任务完成的数据或(如果存在网络错误)空数据。从这一点开始,管道中的故障类型永远不会发生。啊,我不知道
assertNoFailure
。谢谢大家!@rraphael它不起作用,因为catch将(也就是太)立即完成publisher。对于作者的问题,没有通用的解决方案。我有一段时间没有使用catch
,但我似乎记得catch
确实完成了发布程序(以防它捕捉到错误),但用一个新的发布程序替换发布程序(这里只是)。因此,在catch
之后,确实有一个发布者将Never
作为错误类型(并且您将在接收器或分配中使用Just
提供的值)。