【问题标题】:download rate using Alamofire使用 Alamofire 的下载速率
【发布时间】:2018-08-15 12:13:12
【问题描述】:

我正在使用此功能编写带有 alamofire 模块的下载器应用程序我想以 MB/s 为单位显示当前下载速率,但我真的不知道如何实现这一点,请帮助我。


  @IBAction func tapStartButton(_ sender: Any) {



    let fileUrl = self.getSaveFileUrl(fileName: Data[0] as String)
    let destination: DownloadRequest.DownloadFileDestination = { _, _ in
        return (fileUrl, [.removePreviousFile, .createIntermediateDirectories])
    }

    self.request = Alamofire.download(Data[0] as String , to:destination)

        .downloadProgress { (progress) in



        self.progressCircle.progress = progress.fractionCompleted




        cell.progressLabel.isHidden = false


        }

        .responseData { (data) in

            self.Data.removeFirst()
                self.startButton.isHidden = false
                self.pauseButton.isHidden = true

}

【问题讨论】:

    标签: ios swift alamofire afnetworking urlsession


    【解决方案1】:

    我不认为 Alamofire 或任何其他库提供下载速度。开发人员必须自己计算。 你可以这样做:

    • 获取一个保存之前下载字节的全局变量。
    • 使用 NSTimer 以 1 秒为间隔计算速度。

    代码示例:

      var prevDownloadedBytes: Int = 0
      var totalDownloadedBytes: Int = 0
    
      func calculateDownloadSpeed(){
       Timer.scheduleWith(timeInterval: 1.0, repeats: true){
         speed = totalDownloadedBytes - prevDownloadedBytes
         print("Speed is: \(speed) bps")
         prevDownloadedBytes = totalDownloadedBytes 
      }
    }
    
      @IBAction func tapStartButton(_ sender: Any) {
        self.request = Alamofire.download(Data[0] as String , to:destination)
            .downloadProgress { (progress) in
    
            //Set Total Downloaded bytes here
            self.totalDownloadedBytes = progress.fileCompletedCount
    
            self.progressCircle.progress = progress.fractionCompleted
            cell.progressLabel.isHidden = false
            }
            .responseData { (data) in
                self.Data.removeFirst()
                    self.startButton.isHidden = false
                    self.pauseButton.isHidden = true
    }
    

    【讨论】:

    • 谢谢它对我来说工作得很好我有另一个关于 Progress 类的问题,它有一个名为estimatedtimeremaining 的int 类型的属性?我如何使用它,因为它似乎每次都为零
    • 谢谢它的工作。另一个问题我如何在 Progress 类中使用估计的剩余时间,类型是 int?当我称之为它时,它总是为零
    • 您可以在 Apple 的官方页面查看所有详细信息。 link
    • calculateDownloadSpeed 函数确实存在严重问题,我该如何阻止它?我已经尝试了 if 语句带有 bool 属性,但它当然不起作用,因为第一次它是真的并且它继续运行我该怎么办?
    • @mahadshahib 将您的计时器对象存储在变量中,例如。 var timer: Timer! timer = Timer.scheduleWith(timeInterval: 1.0, repeats: true){.... 当你需要停止计时器时,请致电timer.invalidate()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多