You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简化Swift Combine类型,将操作后Publisher转换为AnyPublisher<String, Error>

解决方法

你只需要在整个链式调用的末尾追加eraseToAnyPublisher()操作符即可。这个是Combine框架内置的类型擦除工具,专门用于把操作符生成的复杂嵌套泛型Publisher类型,转换为只暴露输出类型和错误类型的AnyPublisher。

完整代码示例

let myInfoProvider: MyCustomPublisher = ...
let resultPublisher = myInfoProvider.tryMap { v -> Database in
    guard let value = v else { throw "No value provided" }
    return value
}
.map { v in
    MyCustomPublisher(key: v)
}
.switchToLatest()
.tryMap { v -> String in
    guard let value = v else {
        throw "No value found"
    }
    return value
}
.eraseToAnyPublisher() // 追加这行即可

补充说明

  • 上述代码得到的resultPublisher类型就是你需要的AnyPublisher<String, Error>,完全符合要求。
  • 你当前代码中已经使用了tryMap操作符,错误类型已经被自动推导为Error,不需要额外做错误类型转换。如果你自定义的MyCustomPublisher默认错误类型不是Error,只需要在eraseToAnyPublisher()之前追加mapError { $0 as Error }即可。

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:06:03