Y at-il un moyen d'obtenir la taille de fichier sur le disque d'un PHAsset
sans faire requestImageDataForAsset
ou en le convertissant en ALAsset
? Je charge des aperçus de la photothèque d'un utilisateur - potentiellement plusieurs milliers d'entre eux - et il est impératif pour mon application qu'ils connaissent la taille avant l'importation.Obtenir la taille du fichier PHAsset sans charger dans la ressource?
1
A
Répondre
6
Vous pouvez saisir le fileSize
d'un PHAsset et le convertir en une forme lisible par l'homme comme celui-ci:
let resources = PHAssetResource.assetResources(for: yourAsset) // your PHAsset
var sizeOnDisk: Int64? = 0
if let resource = resources.first {
let unsignedInt64 = resource.value(forKey: "fileSize") as? CLong
sizeOnDisk = Int64(bitPattern: UInt64(unsignedInt64!))
}
Ensuite, utilisez votre variable sizeOnDisk
et passer dans une méthode comme ça ...
func converByteToHumanReadable(_ bytes:Int64) -> String {
let formatter:ByteCountFormatter = ByteCountFormatter()
formatter.countStyle = .binary
return formatter.string(fromByteCount: Int64(bytes))
}
C'est vraiment une solution géniale! Mais n'a trouvé cela dans aucun document. Apple approuvera-t-il cela?!? – Erfan
Il ne figure dans aucune documentation car il accède aux fichiers d'en-tête. Techniquement, c'est une petite partie des API privées d'Apple. Cependant, nous avons soumis un build et reçu l'approbation complète sans problème. – daulSwift
D'accord, merci pour la réponse rapide! :) – Erfan