Hier sind zwei weitere verschiedene Implementierungen mit Swift 4 , eine ist detailliert formatiert und die andere ist dezimal formatiert.
Der mit NumberFomatter
:
func fileSize(fromPath path: String) -> String? {
var size: Any?
do {
size = try FileManager.default.attributesOfItem(atPath: path)[FileAttributeKey.size]
} catch (let error) {
print("File size error: \(error)")
return nil
}
guard let fileSize = size as? UInt64 else {
return nil
}
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.formatterBehavior = .behavior10_4
return formatter.string(from: NSNumber(value: fileSize))
}
Und der andere definiert mit Größeneinheiten:
func fileSize(fromPath path: String) -> String? {
guard let size = try? FileManager.default.attributesOfItem(atPath: path)[FileAttributeKey.size],
let fileSize = size as? UInt64 else {
return nil
}
if fileSize < 1023 {
return String(format: "%lu bytes", CUnsignedLong(fileSize))
}
var floatSize = Float(fileSize / 1024)
if floatSize < 1023 {
return String(format: "%.1f KB", floatSize)
}
floatSize = floatSize / 1024
if floatSize < 1023 {
return String(format: "%.1f MB", floatSize)
}
floatSize = floatSize / 1024
return String(format: "%.1f GB", floatSize)
}