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

Posted

技术标签:

【中文标题】Alamofire 4/Swift:进度处理程序不再提供 bytesRead 和 totalBytesRead?【英文标题】:Alamofire 4/Swift: progress handler does not offer bytesRead and totalBytesRead anymore? 【发布时间】:2016-10-09 17:46:23 【问题描述】:

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

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

修改:

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

【问题讨论】:

【参考方案1】:

没错,totalUnitCountcompletedUnitCounttotalBytesExpectedToReadtotalBytesRead 的含义相同。 bytesRead 是一个增量值(在每次迭代中)到 totalBytesRead 值。

现在添加的fractionCompleted 已经是Double 类型中的ratio,因此它在用作进度条的值时很有用。

我已经测试了几个 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

...

【讨论】:

进度条怎么用??【参考方案2】:

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

来自 Alamofire 4 文档:

如果接收者 NSProgress 对象是“叶子进度”(没有子进程), 那么fractionCompleted一般为completedUnitCount / 总单位数。如果接收者 NSProgress 有孩子,则 fractionCompleted 将反映子对象在 除了它自己的completedUnitCount。当孩子们完成时, 父节点的 completedUnitCount 将被更新。

【讨论】:

以上是关于Alamofire 4/Swift:进度处理程序不再提供 bytesRead 和 totalBytesRead?的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 4 swift 3 上传带有标题的 MultipartFormData 未发布

Alamofire 4、Swift 3:无法返回 StatusCode

带参数的 Alamofire 4 Swift 3 GET 请求

使用 Alamofire 4 swift 3 上传图像

Alamofire 4.0 / Swift 3.0 - 附加多部分表单数据(CSV 文件)

Alamofire 上传进度