Печать размера (мегабайт) данных в Swift 3.0

У меня есть переменная fileData типа Data, и я изо всех сил пытаюсь найти, как печатать размер этого.

В прошлом NSData вы печатали длину, но не могли сделать это с этим типом.

Как напечатать размер данных в Swift 3.0?

Ответ 1

Используйте yourData.count и разделите его на 1024 * 1024. Используя Alexanders отличное предложение:

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

Со следующими результатами:

There were 28865563 bytes
formatted result: 28.9 MB

Ответ 2

Если ваша цель - напечатать размер для использования, используйте 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)

Ответ 3

Вы можете использовать count объекта Data, и вы можете использовать length для NSData​​p >

Ответ 4

Введите URL вашего файла в следующем коде, чтобы получить размер файла в МБ, надеюсь, это вам поможет.

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

Ответ 5

После принятого ответа я создал простое расширение:

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

Ответ 6

Чтобы получить размер строки, адаптированный из ответа @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)")
}

Ответ 7

count должен соответствовать вашим потребностям. Вам нужно будет преобразовать байты в мегабайты (Double(data.count) / pow(1024, 2))

Ответ 8

Если вы хотите просто увидеть количество байтов, печать объекта данных может дать вам это.

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

Должен дать вам:

Size is 0 bytes

Другими словами, .count не потребуется в более новой .count Swift 3.2 или выше.