我正在使用 adataTaskPublisher来获取一些数据:
func downloadData(_ req: URLRequest) {
self.cancelToken = dataTaskPublisher(for: req).sink { /* ... */ }
}
Run Code Online (Sandbox Code Playgroud)
如果在请求正在进行时调用该函数,我想返回。
目前我要么:
1.cancelToken在接收器中将设置为 nil 或
2. Crate 并管理一个isDownloading变量。
是否有内置的方法来检查是否dataTaskPublisher正在运行(以及可选的进度)?
我大多同意@Rob,但是您可以使用以下方法控制DataTask发起者的状态DataTaskPublisher及其进度URLSession:
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 { /* ... */ }
}
}
}
Run Code Online (Sandbox Code Playgroud)