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类,发现有completedUnitCount
,totalUnitCount
,好像是totalBytesRead和bytesRead的替代。不确定我是否走在正确的轨道上?
【问题讨论】:
【参考方案1】:没错,totalUnitCount
和 completedUnitCount
与 totalBytesExpectedToRead
与 totalBytesRead
的含义相同。
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】:是的,如果您正在执行单个下载/上传任务(没有子任务),您可以依赖 completedUnitCount
和 totalUnitCount
来自 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 请求