处理统一类型标识符以显示给用户
Handling Uniform Type Identifiers for showing to the user
我正在使用统一类型标识符来获取 PHAssets 的文件类型:
fileFormat = PHAssetResource.assetResources(for: imageAsset).first?.uniformTypeIdentifier
我想向用户显示 fileFormat,所以我需要清理返回的字符串。但是正如您所看到的 here,字符串很乱,并且从一种文件类型到另一种文件类型具有不同的格式。有没有什么方法可以只从 UTI 字符串中获取文件扩展名,或者有什么更好的方法可以在不使用 UTI 的情况下获取 PHAsset 的文件格式?或者我只需要一个一个地清理每个返回的字符串?
我正在寻找一种获取真实文件类型的方法,而不是文件名中包含的扩展名。
您可能正在寻找 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"
}
我找到了解决办法。事实证明,您不仅可以从 UTI 获取文件扩展名,还可以获取 MIME 类型。关键是使用 UTTypeCopyPreferredTagWithClass 和合适的类型标签 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)")
}
}
我正在使用统一类型标识符来获取 PHAssets 的文件类型:
fileFormat = PHAssetResource.assetResources(for: imageAsset).first?.uniformTypeIdentifier
我想向用户显示 fileFormat,所以我需要清理返回的字符串。但是正如您所看到的 here,字符串很乱,并且从一种文件类型到另一种文件类型具有不同的格式。有没有什么方法可以只从 UTI 字符串中获取文件扩展名,或者有什么更好的方法可以在不使用 UTI 的情况下获取 PHAsset 的文件格式?或者我只需要一个一个地清理每个返回的字符串?
我正在寻找一种获取真实文件类型的方法,而不是文件名中包含的扩展名。
您可能正在寻找 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"
}
我找到了解决办法。事实证明,您不仅可以从 UTI 获取文件扩展名,还可以获取 MIME 类型。关键是使用 UTTypeCopyPreferredTagWithClass 和合适的类型标签 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)")
}
}