ByteCountFormatter的进制问题

在瓦工助手App里会显示磁盘空间和流量的使用情况,API返回的单位是B,为了方便,使用了ByteCountFormatter来转换成可读的GB或MB,没想到还踩坑里了。

要不是用户在Telegram群里反馈说App里显示的流量数据和搬瓦工后台的不完全一致,还真发现不了,后台显示的是一个整数,而App里显示的是带小数的,而且比官方后台稍微大一点。

直觉告诉我,这应该是进制差异导致的问题,有些人习惯1000 bytes表示1KB,而计算机认的是1024 bytes。App里的大,很有可能App里用的是1000了,难道Apple是用1000进制来计算文件大小的?

查了一下API文档,我的猜测没错,Apple确实是用1000进制的,不过ByteCountFormatter有好几种CountStyle

binary使用的是1024,decimal使用的是1000,而filememory分别使用了decimalbinary。不幸的是我使用的是file

ByteCountFormatter.string(fromByteCount: Int64(usedData), countStyle: .file)

改成binary就正常了:

ByteCountFormatter.string(fromByteCount: Int64(usedData), countStyle: .binary)