获取给定UTType的扩展名

use*_*274 7 types objective-c

我知道我可以使用UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,extension,NULL)获取给定扩展名的UTType,但我找不到相反的方法,即给定UT的扩展数组...我该怎么办? ?

谢谢

Nik*_*uhe 10

UTTypeCopyPreferredTagWithClass 用于将UTI转换为另一个标记,如文件扩展名:

NSString *extension = (__bridge_transfer NSString *)UTTypeCopyPreferredTagWithClass(myUTI, kUTTagClassFilenameExtension);
Run Code Online (Sandbox Code Playgroud)


om-*_*-ha 5

斯威夫特 5

import MobileCoreServices

static func fileExtension(for dataUTI: String) -> String? {
    guard let fileExtension = UTTypeCopyPreferredTagWithClass(dataUTI as CFString, kUTTagClassFilenameExtension) else {
        return nil
    }

    return String(fileExtension.takeRetainedValue())
}
Run Code Online (Sandbox Code Playgroud)

  • 您需要使用 `.takeRetainedValue()` 来避免内存泄漏...请参阅[这个答案](/sf/answers/1864506381/) 和[这个更一般的答案](/sf/answers/1864506381/) /stackoverflow.com/a/29049072/2194039)了解更多信息。此外,[本文](https://nshipster.com/unmanagement/) 还提供了有关 Swift 与 C API 中的“非托管”返回类型交互的更多一般信息。 (2认同)