【问题标题】:Getting extensions of a given UTType获取给定 UTType 的扩展
【发布时间】:2012-05-10 17:12:53
【问题描述】:

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

谢谢

【问题讨论】:

    标签: objective-c types


    【解决方案1】:

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

    NSString *extension = (__bridge_transfer NSString *)UTTypeCopyPreferredTagWithClass(myUTI, kUTTagClassFilenameExtension);
    

    【讨论】:

    • 非常酷。我还没有测试它,因为我有一个额外的问题:类引用说“将统一类型标识符转换为标签列表”,但返回类型是 CFStringRef ...不应该是 CFArrayRef 吗?
    • 绝对正确。关于函数的返回类型,文档是矛盾的。您应该提交文档错误。然而,该函数返回一个字符串,而不是一个数组。
    【解决方案2】:

    斯威夫特 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())
    }
    

    【讨论】:

    • 您需要使用.takeRetainedValue() 来避免内存泄漏...有关更多信息,请参阅this answerthis more general answer。此外,this article 有更多关于 Swift 与来自 C API 的 Unmanaged 返回类型交互的一般信息。
    • 很好@justinpawela,感谢您改进我的答案。只是根据您的实际建议对其进行了编辑。
    猜你喜欢
    • 2022-01-03
    • 2021-12-01
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 2013-10-10
    相关资源
    最近更新 更多