如何检查URLSession.dataTaskPublisher的当前进度? [英] How do I check the current progress of URLSession.dataTaskPublisher?
问题描述
我正在使用 dataTaskPublisher
来获取一些数据:
I'm using a dataTaskPublisher
to fetch some data:
func downloadData(_ req: URLRequest) {
self.cancelToken = dataTaskPublisher(for: req).sink { /* ... */ }
}
如果在请求进行中调用了该函数,我想返回.
If the function is called while the request is in progress, I would like to return.
当前我是:
1.在接收器或
中将 cancelToken
设置为nil.2.创建并管理一个 isDownloading
变量.
Currently I either:
1. Set the cancelToken
to nil in the sink or
2. Crate and manage a isDownloading
variable.
是否有内置方法来检查 dataTaskPublisher
是否正在运行(以及进度)?
Is there a built-in way to check if the dataTaskPublisher
is running (and optionally its progress)?
推荐答案
我大多同意@Rob,但是您可以控制由 DataTaskPublisher
发起的 DataTask
的状态及其使用 URLSession
方法获得进步:
I mostly agree with @Rob, however you can control state of DataTask
initiated by DataTaskPublisher
and its progress by using of URLSession
methods:
func downloadData(_ req: URLRequest) {
URLSession.shared.getAllTasks { (tasks) in
let task = tasks.first(where: { (task) -> Bool in
return task.originalRequest?.url == req.url
})
switch task {
case .some(let task) where task.state == .running:
print("progress:", Double(task.countOfBytesReceived) / Double(task.countOfBytesExpectedToReceive))
return
default:
self.cancelToken = URLSession.shared.dataTaskPublisher(for: req).sink { /* ... */ }
}
}
}
这篇关于如何检查URLSession.dataTaskPublisher的当前进度?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!