Swift 联合收割机中的可重用发布服务器(订阅?)
我有一个例子,我使用了一个Swift 联合收割机中的可重用发布服务器(订阅?),swift,combine,Swift,Combine,我有一个例子,我使用了一个dataTaskPublisher,然后链接输出,如下所示。现在,我正在使用URLSession的downloadTask(with:completionHandler)实现后台下载,我需要执行完全相同的操作 因此,下面代码中的所有内容,从解码(type:decoder)开始,在这两种情况下都是通用的。是否有某种方法可以获取数据对象,让它通过相同的步骤集而不复制代码 anycancelable=session.dataTaskPublisher(for:url) .ma
dataTaskPublisher
,然后链接输出,如下所示。现在,我正在使用URLSession
的downloadTask(with:completionHandler)
实现后台下载,我需要执行完全相同的操作
因此,下面代码中的所有内容,从解码(type:decoder)
开始,在这两种情况下都是通用的。是否有某种方法可以获取数据
对象,让它通过相同的步骤集而不复制代码
anycancelable=session.dataTaskPublisher(for:url)
.map{$0.data}
.decode(类型:TideLowWaterHeightPredictions.self,解码器:self.decoder)
.map{$0.0}
.删除任何发布者()
.水槽{
...
}receiveValue:{中的预测
...
}
您可以将其封装在扩展中:
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)
或者,如果您已经有一个数据
:
Just(data)
.gargoyle()
.store(in: &tickets)
当然可以,但是你需要把管道分成两部分。你能举个例子吗?正是我需要的,谢谢@mattCool!很乐意帮忙。