组合中的可重用发布者(订阅?)
Posted
技术标签:
【中文标题】组合中的可重用发布者(订阅?)【英文标题】:Reusable publishers (subscriptions?) in Combine 【发布时间】:2021-05-30 20:48:08 【问题描述】:我有一个案例,我使用 dataTaskPublisher
然后链接输出,如下所示。现在我正在使用URLSession
的downloadTask(with:completionHandler)
实现后台下载,我需要执行完全相同的操作。
所以下面代码中的所有内容,从decode(type:decoder)
开始,在这两种情况下都是通用的。有什么方法可以让Data
对象在不复制代码的情况下通过同一组步骤?
anyCancellable = session.dataTaskPublisher(for: url)
.map $0.data
.decode(type: TideLowWaterHeightPredictions.self, decoder: Self.decoder)
.map $0.predictions
.eraseToAnyPublisher()
.sink
...
receiveValue: predictions in
...
【问题讨论】:
可以,但是您需要将管道分成两部分。 你能举个例子吗? ***.com/a/66056209/341994 正是我需要的,谢谢@matt 酷!很高兴为您提供帮助。 【参考方案1】:您可以将其包装在扩展中:
extension Publisher where Output == Data
func gargoyle() -> AnyCancellable
return self
.decode(type: TideLowWaterHeightPredictions.self, decoder: Self.decoder)
.map $0.predictions
.sink
...
receiveValue: predictions in
...
并像这样使用它:
session
.dataTaskPublisher(for: url)
.map $0.data
.gargoyle()
.store(in: &tickets)
如果你已经有Data
,或者像这样:
Just(data)
.gargoyle()
.store(in: &tickets)
【讨论】:
以上是关于组合中的可重用发布者(订阅?)的主要内容,如果未能解决你的问题,请参考以下文章