【发布时间】:2017-08-01 00:59:08
【问题描述】:
我有一个数据类型的变量 fileData,我正在努力寻找如何打印它的大小。
在过去的 NSData 中,您会打印长度,但无法使用此类型执行此操作。
如何在 Swift 中打印数据的大小?
【问题讨论】:
-
这在 Swift 5.4.2 上没有任何警告或错误。 5.1 有什么特别之处?
标签: ios swift cocoa-touch nsdata foundation
我有一个数据类型的变量 fileData,我正在努力寻找如何打印它的大小。
在过去的 NSData 中,您会打印长度,但无法使用此类型执行此操作。
如何在 Swift 中打印数据的大小?
【问题讨论】:
标签: ios swift cocoa-touch nsdata foundation
使用 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)")
}
}
结果如下:
There were 28865563 bytes
formatted result: 28.9 MB
【讨论】:
如果您的目标是打印尺寸以供使用,请使用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 属性感到困惑,也许您应该更新您的答案以使用它而不是硬编码的数字。
NSDimmension 用于信息存储(字节)。我错过了什么吗?
你可以使用 count 的 Data 对象,你仍然可以使用 length 的 NSData
【讨论】:
count。
斯威夫特 5.1
extension Int {
var byteSize: String {
return ByteCountFormatter().string(fromByteCount: Int64(self))
}
}
用法:
let yourData = Data()
print(yourData.count.byteSize)
【讨论】:
根据接受的答案,我创建了简单的扩展:
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))
}}
【讨论】:
在以下代码中输入您的文件 URL 以获取文件大小(以 MB 为单位),希望对您有所帮助。
let data = NSData(contentsOf: FILE URL)!
let fileSize = Double(data.count / 1048576) //Convert in to MB
print("File size in MB: ", fileSize)
【讨论】:
将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
}
}
【讨论】:
如果您只想查看字节数,直接打印数据对象即可。
let dataObject = Data()
print("Size is \(dataObject)")
应该给你:
Size is 0 bytes
换句话说,.count 在较新的 Swift 3.2 或更高版本中不是必需的。
【讨论】:
获取字符串的大小,改编自@mozahler's answer
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)")
}
【讨论】:
count 应该适合您的需求。您需要将字节转换为兆字节 (Double(data.count) / pow(1024, 2))
【讨论】:
(Double, Double) -> Double,但 count 是 Int。您不能将Double 与Int 相乘。