处理要向用户显示的统一类型标识符



我正在使用统一类型标识符来获取PHAssets的文件类型:

fileFormat = PHAssetResource.assetResources(for: imageAsset).first?.uniformTypeIdentifier

我想向用户显示文件格式,所以我需要清理返回的字符串。但正如你在这里看到的,字符串很混乱,并且从一种文件类型到另一种文件类型有不同的格式。有没有办法只从 UTI 字符串中获取文件扩展名,或者有更好的方法可以在不使用 UTI 的情况下获取 PHAsset 的文件格式?或者我只需要一个接一个地清理每个返回的字符串?

我正在寻找一种方法来获取真正的文件类型,而不是文件名中包含的扩展名。

我找到了解决方案。事实证明,您不仅可以从UTI获取文件扩展名,还可以获取MIME类型。关键是将UTTypeCopyPreferredTagWithClass与合适的Type Tag Class一起使用。 完整的文档在这里。

我使用的代码是这样的:

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)")
}
}

您可能正在寻找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"
}

最新更新