如何从数据中确定UTType?

时间:2017-11-23 15:36:30

标签: swift nsdata

在Swift中确定UTType对象Data的最简单最简单的方法是什么?

对于图像,可以这样做:

let imageSource = CGImageSourceCreateWithData(imageData as CFData, nil)
let imageType = CGImageSourceGetType(imageSource)
let isTypeGIF = UTTypeConformsTo(imageType, kUTTypeGIF)

但如果数据类型未知,是否有更通用的方法?

通过第一个字节确定不会产生UTType,因此不是我要找的解决方案:

var c = UnsafeMutablePointer<UInt8>.allocate(capacity: 1)
let firstByte = data.getBytes(c, length: 1)
let isTypeGIF = c[0] == 0x47

更新

此解决方案不起作用,因为它将PNG图像数据标识为普通UTI public.data而不是public.image或更准确public.png

let imageData = UIImagePNGRepresentation(UIImage(named: "image")!)!
let url = URL(fileURLWithPath: NSTemporaryDirectory() + UUID().uuidString)
try? imageData.write(to: url, options: [.atomicWrite])              
let typeIdentifer = try? url.resourceValues(forKeys: [.typeIdentifierKey])
let uti = typeIdentifer?.typeIdentifier
let isGif = UTTypeConformsTo(uti as! CFString, kUTTypeGIF)

0 个答案:

没有答案