在多个ViewControllers中快速查看downloadTask的进度,可以通过以下步骤实现:
以下是一个示例的实现代码:
// DownloadManager.swift
import Foundation
class DownloadManager: NSObject, URLSessionDownloadDelegate {
static let shared = DownloadManager()
private var downloadTask: URLSessionDownloadTask?
private var downloadProgress: Float = 0.0
private override init() {
super.init()
}
func startDownload(url: URL) {
let session = URLSession(configuration: .default, delegate: self, delegateQueue: nil)
downloadTask = session.downloadTask(with: url)
downloadTask?.resume()
}
func cancelDownload() {
downloadTask?.cancel()
}
func getDownloadProgress() -> Float {
return downloadProgress
}
// URLSessionDownloadDelegate methods
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
// Handle downloaded file
}
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
downloadProgress = Float(totalBytesWritten) / Float(totalBytesExpectedToWrite)
}
}
// ViewController.swift
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var progressView: UIProgressView!
override func viewDidLoad() {
super.viewDidLoad()
// Start download
let downloadURL = URL(string: "https://example.com/file.zip")!
DownloadManager.shared.startDownload(url: downloadURL)
// Update progress
Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { [weak self] timer in
guard let self = self else {
timer.invalidate()
return
}
let progress = DownloadManager.shared.getDownloadProgress()
self.progressView.progress = progress
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Cancel download when leaving the ViewController
DownloadManager.shared.cancelDownload()
}
}
在上述示例中,DownloadManager类使用了单例模式,确保在整个应用程序中只有一个实例。它通过NSURLSession来创建一个下载任务,并实现了URLSessionDownloadDelegate代理方法来监听下载进度的变化。在ViewController中,通过调用DownloadManager.shared的方法来获取下载进度,并将其更新到界面上的进度条中。
请注意,这只是一个简单的示例,实际应用中可能需要更多的错误处理和其他功能。另外,示例中使用了Swift语言和UIKit框架,如果你使用其他编程语言或框架,请相应地进行调整。
推荐的腾讯云相关产品:腾讯云对象存储(COS),用于存储和管理下载的文件。产品介绍链接地址:https://cloud.tencent.com/product/cos
领取专属 10元无门槛券
手把手带您无忧上云