ios - Swift Combine:如何指定 tryMap(_:) 的错误类型?
问题描述
在 Combine 框架中,我们可以Error
在使用tryMap
.
但是,我们如何才能更具体地了解Error
类型?
例如,
let publisher = urlSession.dataTaskPublisher(for: request).tryMap { (data, response) -> (Data, HTTPURLResponse) in
guard let response = response as? HTTPURLResponse else {
throw URLError(.cannotParseResponse)
}
return (data, response)
}
如何指定Error
this 的类型publisher
?我想使用URLError
而不是Error
.
我setFailureType(to:)
在Combine
框架中找到了方法。但是,它不适用于tryMap(_:)
.
解决方案
setFailureType(to:)
只是强制具有 failure type 的发布者的失败类型Never
。tryMap
总是Error
用作错误类型,因为任何Error
可能在闭包体中抛出,所以你需要使用mapError
强制URLError
类型:
let map_error = publisher.mapError({ error -> URLError in
switch (error) {
case let url_error as URLError:
return url_error
default:
return URLError(.unknown)
}
})
推荐阅读
- windows - `more.com` 返回“内存不足”。
- sharepoint - 我可以将 Sharepoint 页面的不同部分限制为不同的用户吗?
- python-3.x - 将数据框中的索引和列与字典进行比较
- qt - 查找所有已安装的模块 QML
- docker - 从 docker compose 内部运行 sudo 命令
- javascript - 访问不使用变量的对象
- javascript - 如何使用 selenium Web 驱动程序等待警报关闭以使用 javascript 在主窗口中输入密码
- python - 将 Convnet.js 神经网络模型转换为 Keras Tensorflow
- git - Git 分支完全不同步
- html - 如何使所有输入字段的自动完成默认为关闭?