Swift: 如何辨别文件的类型(file type) – Uniform Type Identifiers (UTIs)

尊重原创,转载请注明出处!  作者:图林根的烤肠,如有纰漏欢迎指出。

文章来源:https://www.mahong.me/archives/342

最近在使用swift编程中,发现对于如何判断读取的文件类型是一个很麻烦的问题。

其中的一个笨方法就是截取文件的文件名,然后对照是否与之相符。例如如果需要 “txt” 文件结尾的文件,用读取文件的后缀名与 “txt” 比较是否相符就可以了。但是这种方法有个很大的局限性,就是如果我打算对我的 Media 文件夹只显示音频或者视频文件的话,总不能把全部的媒体文件名列出来吧?“mp3”,”mp4″,”mkv”….等等等等,这样写出来的代码也繁琐无比,而且还十分容易出现差漏。

在查找相关资料后发现,apple 在 io3中就提供了 UTTypeCreatePreferredIdentifierForTag 方法来进行文件的验证,该方法十分简单,具体是通过文件的  Uniform Type Identifiers(UTIs) 来判断文件的格式,关于UTIs的具体介绍,在文章末尾有链接可以查看官方文档。

使用方法如下:

  1. 在使用之前需要在文件中引入  import MobileCoreServices
  2. 核心算法代码就如下几行
    // 需要把url地址先转换成NSURL后再获取文件路径的扩展名
    if let fileExt = NSURL(fileURLWithPath: filePath).pathExtension{
        // 把文件转换成 Uniform Type Identifiers 后获取文件的 tag
       let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,
                                                       fileExt as CFString,
                                                       nil)
       // 通过UTTypeConformsTo 方法来判断文件类型是否为图片,kUTTypeImage 是需要比较的文件类型
       if UTTypeConformsTo((uti?.takeRetainedValue())!, kUTTypeImage){ 
          print("这是一个图片")
          // 接下来的操作 
       }
    }

    这其中,如果判断文件是否为其他类型,例如视频等,可以点击下面链接来查看kUTTypeImage的详细苹果官方文档