progress.fractionCompleted

  

    // MARK: 载文件

    /**

     载文件

     

     - parameter urlStr:      文件的网络地址

     - parameter savePath:    保存路径(包含文件名)

     - parameter progress:    进度

     - parameter resultBlock: 结果回调

     */

    func download(urlStr: String, savePath: String, progress: ((_ progress: Double) -> ())?, resultBlock: ((URL?, Error?)->())?) {

        let urlRequest = URLRequest(url: URL(string: urlStr)!)

        let task = self.downloadTask(with: urlRequest, progress: {

            if progress != nil {

                progress!(($0.fractionCompleted))

            }

        }, destination: { (url, response) -> URL in

            return URL(fileURLWithPath: savePath)

        }, completionHandler: { (response, url, error) in

            if resultBlock != nil {

                resultBlock!(url, error)

            }

        })

        

        task.resume()

    }



追踪下载进度


在下载开始之后,请求会开始更新progress,这是一个NSProgress类型的属性。app通过对progress.fractionCompleted进行KVO来追踪下载进度。这需要开始和结束观察,以及添加当值改变时执行的代码。列表4-6展示了如何开始和结束观察进度。列表4-7展示了当值改变时执行的代码。

列表4-6 开始和结束追踪下载进度

1
2
3
4
5
// Start observing fractionCompleted for the progress
[self.resourceRequest.progress addObserver:self forKeyPath:@ "fractionCompleted"  options:NSKeyValueObservingOptionNew context:NULL];
  
// Stop observing fractionCompleted for the progress
[self.resourceRequest.progress removeObserver:self forKeyPath:@ "fractionCompleted" ];

列表4-7 当fractionCompleted的值改变时执行的代码

1
2
3
4
5
6
7
8
9
//
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
     // Check for the progress object and key
     if  ((object == self.resourceRequest.progress) && ([keyPath isEqualToString:@"fractionCompleted])) {
         double progressSoFar = self.resourceRequest.progress.fractionCompleted;
         // do something with the value
     }
}
  

追踪下载的两个重要用途是:

  • 调整下载优先级。如果下载时间过长可以提高优先级,如果时间充裕可以降低优先级。

  • 为用户提供下载进度反馈。可以使用一个简单的进度条来反馈fractionCompleted的值。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值