简体   繁体   English

打印 Swift 中数据的大小(兆字节)

[英]Print the size (megabytes) of Data in Swift

I have a variable fileData of Data type and I am struggling to find how to print the size of this.我有一个数据类型的变量 fileData,我正在努力寻找如何打印它的大小。

In the past NSData you would print the length but unable to do that with this type.在过去的 NSData 中,您会打印长度但无法使用此类型执行此操作。

How to print the size of a Data in Swift?如何打印Swift中数据的大小?

Use yourData.count and divide by 1024 * 1024. Using Alexanders excellent suggestion:使用 yourData.count 并除以 1024 * 1024。使用 Alexanders 的好建议:

    func stackOverflowAnswer() {
      if let data = #imageLiteral(resourceName: "VanGogh.jpg").pngData() {
      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)")
      }
    }

With the following results:结果如下:

There were 28865563 bytes
formatted result: 28.9 MB

If your goal is to print the size to the use, use ByteCountFormatter如果您的目标是打印大小以供使用,请使用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)

您可以使用 Data 对象的count ,并且仍然可以使用 NSData 的length

Swift 5.1斯威夫特 5.1

extension Int {
    var byteSize: String {
        return ByteCountFormatter().string(fromByteCount: Int64(self))
    }
}

Usage:用法:

let yourData = Data()
print(yourData.count.byteSize)

Following accepted answer I've created simple extension:按照接受的答案,我创建了简单的扩展:

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))
 }}

Enter your file URL in the following code to get file size in MB, I hope this helps you.在以下代码中输入您的文件 URL 以获取以 MB 为单位的文件大小,我希望这对您有所帮助。

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

If you want to just see number of bytes, printing the data object directly can give that to you.如果你只想查看字节数,直接打印数据对象可以给你。

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

Should give you:应该给你:

Size is 0 bytes

In other words, .count won't be necessary in newer Swift 3.2 or higher.换句话说,在较新的 Swift 3.2 或更高版本中不需要.count

To get the size of a string, adapted from @mozahler's answer获取字符串的大小,改编自@mozahler 的回答

if let data = "some string".data(using: .utf8)! {
  print("There were \(data.count) bytes")
  let bcf = ByteCountFormatter()
  bcf.allowedUnits = [.useKB] // optional: restricts the units to MB only
  bcf.countStyle = .file
  let string = bcf.string(fromByteCount: Int64(data.count))
  print("formatted result: \(string)")
}

A quick extension for getting Data size in megabytes as Double .用于将Data大小(以兆字节为单位)作为Double快速扩展。

extension Data {
    func getSizeInMB() -> Double {
        let bcf = ByteCountFormatter()
        bcf.allowedUnits = [.useMB]
        bcf.countStyle = .file
        let string = bcf.string(fromByteCount: Int64(self.count)).replacingOccurrences(of: ",", with: ".")
        if let double = Double(string.replacingOccurrences(of: " MB", with: "")) {
            return double
        }
        return 0.0
    }
}
func sizeInMB(data: Data) -> String {
    let bytes = Double(data.count)
    let megabytes = bytes / (1024 * 1024)
    return String(format: "%.2f MB", megabytes)
}

The following takes in a Data object as an argument and calculates the size of that Data in megabytes.以下将Data object 作为参数并计算该Data的大小(以兆字节为单位)。 The size is then returned as a String with a maximum of 2 decimal places.然后将大小作为最多保留 2 位小数的String返回。

count should suit your needs. count应该适合您的需求。 You'll need to convert bytes to megabytes ( Double(data.count) / pow(1024, 2) )您需要将字节转换为兆字节( Double(data.count) / pow(1024, 2)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM