在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)