首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift:无法从文件扩展名UTType获取mime类型的表单.pkpass

Swift:无法从文件扩展名UTType获取mime类型的表单.pkpass
EN

Stack Overflow用户
提问于 2021-08-05 08:56:10
回答 1查看 1.2K关注 0票数 0

我正在编写一种方法,从给定的文件扩展名获取MIME类型:

代码语言:javascript
复制
    private class func mime(from utType: UTType) -> String? {
        let mimeType: String

        if let preferredMIMEType = utType.preferredMIMEType {
            mimeType = preferredMIMEType
        } else {
           return nil
        }

        return mimeType
    }

    public class func convertToMime(fileExtension: String) -> String? {
        var utType: UTType? = UTType(filenameExtension: fileExtension)

            
        var mimeType: String?
        if let utType = utType {
            mimeType = mime(from: utType)
        }
                        
        return mimeType
    }

测试通过了txtmp4类型,而不是pkpass

代码语言:javascript
复制
    func testThatConvertToMimeConvertsFileExtensions() {
        XCTAssertEqual(UTIHelper.convertToMime(fileExtension: "pkpass"), "application/vnd.apple.pkpass")
        XCTAssertEqual(UTIHelper.convertToMime(fileExtension: "txt"), "text/plain")
        XCTAssertEqual(UTIHelper.convertToMime(fileExtension: "mp4"), "video/mp4")
    }

我试着打印UTType的信息,得到了以下信息:

代码语言:javascript
复制
print(utType.description)
print(utType.tags)
print(utType.preferredMIMEType)


com.apple.pkpass-data
[public.filename-extension: ["pkpass"]]
nil
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-05 09:27:27

您使用的UTType 初始化器的第二个参数的默认参数是.data

代码语言:javascript
复制
init?(filenameExtension: String, conformingTo supertype: UTType = .data)

因此,它找到了一个UTType,它是public.data的一个子类型。但是,您想要的UTType (com.apple.pkpass)没有将public.data作为超级类型(即不符合public.data)。实际上,.pkpass文件有点像.framework文件--它是一个包/包。(尝试使用Unarchiver提取其内容!)这就是初始化器找不到正确的UTType的原因。

了解有关UTType这里的层次结构的更多信息。

您可以使用另一个首字母,并将nil传递给conformingTo参数。这将找到具有指定文件名的任何UTType

代码语言:javascript
复制
let type = UTType(tag: "pkpass", tagClass: .filenameExtension, conformingTo: nil)
print(type.preferredMIMEType ?? "nil") // application/vnd.apple.pkpass

还请注意文档中的警告:

不要试图仅基于文件扩展名派生文件系统对象的类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68663474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档