Alamofire 4 / Swift:进度处理程序不再提供bytesRead和totalBytesRead了?

时间:2016-10-09 17:46:23

标签: ios swift3 alamofire

最近,我正在尝试迁移到Swift 3,这意味着我还需要使用Alamofire 4.

在Alamofire 3中,进程处理程序提供对bytesRead,totalBytesRead,totalBytesExpectedToRead的访问,但是在Alamofire 4中,似乎处理程序只有一个参数“progress”,这只允许我看到“fractionCompleted”。但是对于UILabel的文本,我需要bytesRead和totalBytesRead。我想我有可能获得这两个值吗?非常感谢!

修饰:

刚看了一下Progress类,发现有completedUnitCounttotalUnitCount,它们似乎是totalBytesRead和bytesRead的替代品。不确定我是否走在正确的轨道上?

2 个答案:

答案 0 :(得分:3)

确切地说,totalUnitCountcompletedUnitCounttotalBytesExpectedToReadtotalBytesRead具有相同的含义。 bytesRead是一个增量(在每次迭代中)到totalBytesRead值的值。

现在添加的fractionCompleted已经是Double类型的比率,因此在用作进度条的值时非常有用。

我已经测试了几个Progress值,因此这是代码(在文件中测试的大小约为600 kB):

.downloadProgress { progress in
     print("fractionCompleted: \(progress.fractionCompleted)")                
     print("completedUnit: \(progress.completedUnitCount)")
     print("totalUnitCount: \(progress.totalUnitCount)")
}

...输出以下(我从调试控制台中选择了前3次迭代):

fractionCompleted: 0.104675046718523 
completedUnit: 65536 
totalUnitCount: 626090

fractionCompleted: 0.209350093437046 
completedUnit: 131072 
totalUnitCount: 626090

fractionCompleted: 0.314025140155569 
completedUnit: 196608 
totalUnitCount: 626090

...

答案 1 :(得分:0)

是的,如果您正在执行单个下载/上传任务(没有子任务),则可以依赖completedUnitCounttotalUnitCount

来自Alamofire 4 doc:

  

如果接收方NSProgress对象是"叶子进度" (没有小孩),   那么fractionCompleted通常是completedUnitCount /   totalUnitCount。如果接收者NSProgress有孩子,那么   fractionCompleted将反映在子对象中所取得的进展   除了自己的completedUnitCount。当孩子们完成时,   将更新父级的completedUnitCount。