2015-11-09 61 views
3

我嘗試添加字節的字節,以獲得將從互聯網檢索的照片佔用的空間。Swift - 如何計算字節數並將它們轉換爲兆字節?

我有下面的代碼,它得到的大小以字節爲array每個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)") 

例如,我試圖讓三個要素,其中有下面的字節大小的大小(這些大小在字節的I接收在JSON)

3223653 
5855382 
8948976 
當上述代碼被執行

我接收的

diskSpaceInMb is 8 
結果

這顯然不是嘗試

如何正確地將字節轉換爲兆字節?

+3

您可以用[NSByteCountFormatter(http://stackoverflow.com/a/12674661/300836)爲您的目的? –

+0

您也應該打印'diskSpace'來驗證您的循環是否按預期工作。 – rmaddy

+0

@Alexey K你應該異步獲取你的數據 –

回答

2

問題顯然在for循環中。也許JSON不像你期望的那樣。

這可能會失敗的另一個原因是您使用try?關鍵字,在這種情況下,這意味着如果成功,它會給您一個值,否則返回nil。在你的情況下,它可能會默默地失敗。如果你想檢查它是否失敗,你可以添加一個else分支。

playground example

+2

請複製並粘貼代碼而不是圖片 – Kametrixom

+1

它與上面的代碼相同......它只是在右側有一些dubugging信息。 –

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

這是現在這樣做的正確方法。 – Vive

相關問題