Учитывая, что у вас уже есть объект PHAsset, PHAssetResource - это то, что вам нужно, чтобы получить имя файла.
let assetResources = PHAssetResource.assetResources(for: asset)
Это вернет вам массив из PHAssetResource
экземпляров, среди которых одно из них - текущее изображение.
Просматривая экземпляры PHAssetResource в отладчике, вы можете увидеть, что он содержит несколько файлов. Это может включать данные настройки, представленные .plist, и одну или несколько фотографий.
Чтобы получить файл, который в данный момент доступен, вам нужно найти ключ isCurrent
. Apple не предоставила этот ключ как переменную для PHAssetResource, однако они не прилагают никаких усилий, чтобы скрыть значение. И я предполагаю, что запрос этого значения не приводит к отклонению приложения.
Вы можете запросить это значение напрямую или сделать это более аккуратно, расширив PHAssetResource.
extension PHAssetResource {
var isCurrent: Bool? {
self.value(forKey: "isCurrent") as? Bool
}
}
Теперь, вы можете задать [PHAssetResource]
, для первого элемента, который isCurrent
, а также фото или видео.
let resourceTypes: [PHAssetResourceType] = [.photo, .video, .audio, .fullSizePhoto]
let currentAssetResource = assetResources.first(
where: { $0.isCurrent == true && resourceTypes.contains($0.type)
})
И, наконец, имя файла.
let fileName = currentAssetResource?.originalFilename
Примечание
PhotoKit ожидает, что разработчик будет работать с абстрактным ресурсом актива, а не с базовыми файлами или данными. Использование isCurrent
кажется разрешенным. Однако это значение можно изменить или удалить с помощью обновления iOS. Делайте это только в том случае, если у вас есть надежный пример использования для извлечения имени файла.