如何在重新加载视图控制器后仍然显示 progressView 的进度?

how to still show the progress of progressView after reloading the view controller?

这是我在 swift 上的第一个问题,我在互联网上找不到任何答案。我有一个从 url 下载 pdf 文件的下载按钮,还有一个向用户显示下载进度的 progressView。一切正常,但是当我下载文件并重新加载视图控制器时,progressView 的进度重置为零。即使在重新加载 viewController.

后,我如何仍然显示下载进度

我正在传递另一个 viewController

的 url

请帮助我。

这是我的代码

class CellDetailsViewController: UIViewController , URLSessionDownloadDelegate{

    var download = ""
    var downloadTask : URLSessionDownloadTask!

   override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func download(_ sender: Any) {
        guard let url = URL(string: download)else {return}
        let urlSession = URLSession(configuration: .default, delegate: self, delegateQueue: OperationQueue())
         downloadTask = urlSession.downloadTask(with: url)
        downloadTask.resume()
        print("downloading")
    }


    func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
        print("download Location", location)
        let fileManager = FileManager.default
        let documentPath = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
        let PdfName = documentPath.appendingPathComponent("\(name).pdf")
        try? fileManager.removeItem(at: PdfName)
        do{
            try fileManager.moveItem(at: location, to: PdfName)
        }catch{
            print("copy error\(error.localizedDescription)")
        }
    }


    func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
        
        if totalBytesExpectedToWrite > 0 {
            let progress = Float(totalBytesWritten) / Float(totalBytesExpectedToWrite)
            DispatchQueue.main.async {
                self.progressView.progress = progress
                print(totalBytesExpectedToWrite)
                if progress == 1 {
                    self.progressView.isHidden = true
                }
            }
        }
    }

}

您可以将静态变量存储在其他地方的结构中。我会创建一个新文件,您可以将其存储在“模型”文件夹中并执行如下操作:

struct staticVariableStorage {
static var fileProgress : Double = 0.0 }

然后您可以通过将新值设置为

在您的代码中访问它
staticVariableStorage.fileProgress

这不应该受到重置 ViewController 的影响,因为它首先与 ViewController 分开。