2015-02-17 42 views
4

我一直在尝试转换这个代码,我从这个example(在Objective-c中)没有运气。如何找到文件UTI文件,没有pathExtension,在Swift中的路径

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) 

所有我想要做的就是找出一个文件是

+0

如果你看一下你试图移植的代码以及你正在移植它的答案的评论,你会注意到它没有做你所需要的 - 它从文件名获得扩展名,然后查找MIME类型为此扩展。如果你想要的类型信息没有扩展名,你需要查看文件的前几个字节[magic numbers](http://en.wikipedia.org/wiki/Magic_number_(编程))。 iOS不包括一个API,但[有第三方选项](http://stackoverflow.com/q/3173267/957768)。 – rickster 2015-02-17 21:21:59

回答

9

您可以使用URL方法resourceValues(forKeys:)来获取文件的图像或视频文件URL TypeIdentifierKey它返回文件统一类型标识符(UTI)。你只需要检查视频的返回值是“com.apple.m4v-video”,图片是否为“public.jpeg”或“public.png”等等。您可以添加typeIdentifier属性扩展到URL返回TypeIdentifierKey字符串值如下:

的Xcode 9•斯威夫特4的Xcode 8.3.2•斯威夫特3.1

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