我正在使用统一类型标识符来获取PHAsset的文件类型:
fileFormat = PHAssetResource.assetResources(for: imageAsset).first?.uniformTypeIdentifier
我想向用户显示fileFormat,因此我需要清理返回的字符串。但是,正如您看到的here一样,字符串杂乱无章,格式从一种文件类型到另一种文件类型都不同。有没有办法从UTI字符串中仅获取文件扩展名,或者有任何更好的方法而不使用UTI来获取PHAsset的文件格式?还是我只需要一个个清理每个返回的字符串?
我正在寻找一种获取真实文件类型的方法,而不是文件名中包含的扩展名。
答案 0 :(得分:0)
您可能正在寻找UTTypeCopyDescription
。例如:
import MobileCoreServices
let png = kUTTypePNG // or, for example: "public.png" as CFString
if let desc = UTTypeCopyDescription(png)?.takeRetainedValue() {
let desc = desc as String // "PNG image"
}
答案 1 :(得分:0)
我找到了解决方案。事实证明,不仅可以从UTI获取文件扩展名,而且还可以获取MIME类型。关键是将UTTypeCopyPreferredTagWithClass与合适的Type Tag Class一起使用。完整的文档here。
我正在使用的代码是这样:
import MobileCoreServices
if let fileUTI = PHAssetResource.assetResources(for: imageAsset).first?.uniformTypeIdentifier {
if let fileExtension = UTTypeCopyPreferredTagWithClass(fileUTI as CFString, kUTTagClassFilenameExtension)?.takeRetainedValue() {
print("File type is: \(fileExtension)")
}
}