Как найти файл UTI для файла без указания пути в пути в Swift

Я пытался преобразовать этот код, который я имел из этогопример (в Objective-c) без удачи.

    String *path; // contains the file path

    // Get the UTI from the file's extension:

    CFStringRef pathExtension = (__bridge_retained CFStringRef)[path pathExtension];
    CFStringRef type = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension, NULL);
    CFRelease(pathExtension);

    // The UTI can be converted to a mime type:

    NSString *mimeType = (__bridge_transfer NSString *)UTTypeCopyPreferredTagWithClass(type, kUTTagClassMIMEType);
    if (type != NULL)
        CFRelease(type);

Мой код это

    import MobileCoreServices
    let path: String?
    let pathExt = path.pathExtension as CFStringRef
    let type = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension, NULL);
    let mimeType = UTTypeCopyPreferredTagWithClass(type, kUTTagClassMIMEType)
    if type != Null
            CFRelease(type)

Все, что я хочу сделать, это выяснить, является ли файл изображением или видеофайлом

 rickster17 февр. 2015 г., 22:21
Если вы посмотрите на код, который вы пытаетесь портировать, и комментарии к ответу, из которого вы его переносите, вы заметите, что он не делает то, что вам нужно - он получает расширение от имени файла, затем ищет тип MIME для этого расширения. Если вы хотите получить информацию о типе без расширения, вам нужно просмотреть первые несколько байтов файла длямагические числа, iOS не включает API для этого, ноесть сторонние варианты.

Ответы на вопрос(1)

Ты можешь использоватьURL методresourceValues(forKeys:) получить файлURL TypeIdentifierKey который возвращает идентификатор универсального типа файла (UTI). Вам просто нужно проверить, является ли возвращаемое значение com.apple.m4v-video для видео, public.jpeg или public.png для изображений и так далее. Вы можете добавить расширение свойства typeIdentifier в URL для возврата строкового значения TypeIdentifierKey следующим образом:

Xcode 9 • Swift 4 или жеXcode 8.3.2 • Swift 3.1

extension URL {
    var typeIdentifier: String? {
        return (try? resourceValues(forKeys: [.typeIdentifierKey]))?.typeIdentifier
    }
    var localizedName: String? {
        return (try? resourceValues(forKeys: [.localizedNameKey]))?.localizedName
    }
}

Ваш ответ на вопрос