Обработка универсальных идентификаторов типов для показа пользователю

Я использую универсальные идентификаторы типов, чтобы получить тип файла PHAssets:

fileFormat = PHAssetResource.assetResources(for: imageAsset).first?.uniformTypeIdentifier

Я хочу показать пользователю fileFormat, поэтому мне нужно очистить возвращаемую строку. Но, как вы видите, здесь строки беспорядочны и имеют разные форматы от одного типа файла к другому. Есть ли способ получить только расширения файлов из строки UTI или какой-либо лучший способ получить формат файла PHAsset без использования UTI? или мне просто нужно очистить каждую возвращаемую строку одну за другой?

Я ищу способ получить истинный тип файла, а не расширение, включенное в имя файла.


person HemOdd    schedule 18.04.2019    source источник


Ответы (2)


Я нашел решение. Оказывается, вы можете получить не только расширение файла из UTI, но и типы MIME. Ключевым моментом является использование UTTypeCopyPreferredTagWithClass с подходящим классом тегов типа. Полная документация здесь.

И код, который я использую, таков:

    import MobileCoreServices

    if let fileUTI = PHAssetResource.assetResources(for: imageAsset).first?.uniformTypeIdentifier {

            if let fileExtension = UTTypeCopyPreferredTagWithClass(fileUTI as CFString, kUTTagClassFilenameExtension)?.takeRetainedValue() {

                        print("File type is: \(fileExtension)")
            }
     }
person HemOdd    schedule 19.04.2019

Возможно, вы ищете UTTypeCopyDescription. Например:

import MobileCoreServices

let png = kUTTypePNG // or, for example: "public.png" as CFString
if let desc = UTTypeCopyDescription(png)?.takeRetainedValue() {
    let desc = desc as String // "PNG image"
}
person matt    schedule 18.04.2019
comment
Спасибо за ответ. Решением стала другая функция UTType. Вы можете проверить мой ответ. - person HemOdd; 19.04.2019