Swift - 如何计算字节数并将其转换为兆字节?

15

我试图将字节与字节相加,以便腾出空间来存储我从互联网中获取的照片。

以下是我的代码,它获取id数组中每个id的字节大小。

    var diskSpace:Int64 = 0

    for var i = 0; i < array.count; i++  {

        let id = array[i]

        let urlString = "urlToFetchData"

        if let url = NSURL(string: urlString) {
            if let data = try? NSData(contentsOfURL: url, options: []) {
                let json = JSON(data: data)

                let size = Int64(json["size"].stringValue)

                diskSpace = diskSpace + size!

            }
        }

    }

   var diskSpaceInMb = diskSpace / 1024 / 1024
   print("diskSpaceInMb is \(diskSpaceInMb)")
例如,我试图获取三个元素的大小,这些元素在json中以字节形式给出。
3223653
5855382
8948976

当上述代码被执行时,我会收到以下结果

diskSpaceInMb is 8

显然这不是真的。

如何正确地将字节转换为兆字节?


5
你可以使用NSByteCountFormatter来完成你的目的吗? - Matt Gibson
你应该打印 diskSpace 以验证你的循环是否按预期工作。 - rmaddy
@Alexey K,你应该使用异步方式获取数据 - Leo Dabus
2个回答

60
let fileSizeWithUnit = ByteCountFormatter.string(fromByteCount: diskSpace, countStyle: .file)
print("File Size: \(fileSizeWithUnit)")

3
问题显然出现在for循环中。可能JSON不符合您的期望。
这可能失败的另一个原因是您使用了try?关键字,在此上下文中,它表示如果成功,则给您一个值,否则返回nil。在您的情况下,它可能会悄悄地失败。如果您想检查它是否失败,可以添加else分支。
示例:playground example

1
这是与上面相同的代码...它只是在右侧具有一些调试信息。 - Ilea Cristian
1
如何复制粘贴您的屏幕截图? - user1244109

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接