Работа с унифицированными идентификаторами типов для показа пользователю - PullRequest
0 голосов
/ 18 апреля 2019

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Я нашел решение.Оказывается, вы можете не только получить расширение файла от 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)")
            }
     }
0 голосов
/ 18 апреля 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"
}
...