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

时间:2019-04-18 16:15:30

标签: ios swift phasset

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

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

我想向用户显示fileFormat,因此我需要清理返回的字符串。但是,正如您看到的here一样,字符串杂乱无章,格式从一种文件类型到另一种文件类型都不同。有没有办法从UTI字符串中仅获取文件扩展名,或者有任何更好的方法而不使用UTI来获取PHAsset的文件格式?还是我只需要一个个清理每个返回的字符串?

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

2 个答案:

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