web-dev-qa-db-fra.com

Imprimer la taille (mégaoctets) de données dans Swift 3.0

J'ai une variable fileData de type Data et j'ai du mal à trouver comment en imprimer la taille.

Dans le passé, NSData imprimait la longueur mais ne pouvait pas le faire avec ce type.

Comment imprimer la taille d'une donnée dans Swift 3.0?

14
user2512523

Utilisez yourData.Count et divisez par 1024 * 1024. En utilisant Alexanders excellente suggestion:

    func stackOverflowAnswer() {
      if let data = UIImagePNGRepresentation(#imageLiteral(resourceName: "VanGogh.jpg")) as Data? {
      print("There were \(data.count) bytes")
      let bcf = ByteCountFormatter()
      bcf.allowedUnits = [.useMB] // optional: restricts the units to MB only
      bcf.countStyle = .file
      let string = bcf.string(fromByteCount: Int64(data.count))
      print("formatted result: \(string)")
      }
    }

Avec les résultats suivants:

There were 28865563 bytes
formatted result: 28.9 MB
43
Mozahler

Si votre objectif est d’imprimer la taille à l’utilisation, utilisez ByteCountFormatter

import Foundation

let byteCount = 512_000 // replace with data.count
let bcf = ByteCountFormatter()
bcf.allowedUnits = [.useMB] // optional: restricts the units to MB only
bcf.countStyle = .file
let string = bcf.string(fromByteCount: Int64(byteCount))
print(string)
14
Alexander

Vous pouvez utiliser count de l’objet de données et vous pouvez toujours utiliser length pour NSData.

6
abdullahselek

Suite à la réponse acceptée, j'ai créé une extension simple:

extension Data {
func sizeString(units: ByteCountFormatter.Units = [.useAll], countStyle: ByteCountFormatter.CountStyle = .file) -> String {
    let bcf = ByteCountFormatter()
    bcf.allowedUnits = units
    bcf.countStyle = .file

    return bcf.string(fromByteCount: Int64(count))
 }}
2
Jovan Stankovic

Entrez votre URL de fichier dans le code suivant pour obtenir la taille du fichier en Mo, j'espère que cela vous aidera.

let data = NSData(contentsOf: FILE URL)!
let fileSize = Double(data.length / 1048576) //Convert in to MB
print("File size in MB: ", fileSize)
0
AtulParmar

Si vous voulez seulement voir le nombre d'octets, imprimer directement l'objet de données peut vous le donner.

let dataObject = Data()
print("Size is \(dataObject)")

Devrait vous donner:

Size is 0 bytes

En d'autres termes, .count ne sera pas nécessaire dans les nouvelles versions de Swift 3.2 ou ultérieures.

0
Dino Alves