ios - Swift のパスで、pathExtension を使用せずにファイルのファイル UTI を検索する方法



xcode swift2 (1)

私はこの example (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)

やりたいことは、ファイルが画像ファイルか動画ファイルかを調べることです


Answer #1

URL メソッド resourceValues(forKeys:) を使用して、ファイルの統一型識別子(UTI)を返すファイル URL TypeIdentifierKey を取得でき URL TypeIdentifierKey 。 戻り値が動画の場合は「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
    }
}




uti