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