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?
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
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)
Vous pouvez utiliser count
de l’objet de données et vous pouvez toujours utiliser length
pour NSData.
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))
}}
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)
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.