首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >URL的iOS15 UTType弃用

URL的iOS15 UTType弃用
EN

Stack Overflow用户
提问于 2021-10-12 12:35:55
回答 2查看 871关注 0票数 5

使用Swift5.5、iOS15.0.1、

作为iOS15,我意识到与我现有的URL扩展相关的有相当多的弃用。

我没有找到任何关于如何重写现有扩展的好文档。

这是我目前使用approx的实现。16折旧警告,我不知道如何规避使用iOS15。任何关于这方面的想法都是非常感谢的!

代码语言:javascript
运行
复制
extension URL {
    func mimeType() -> String {
        let pathExtension = self.pathExtension
        if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as NSString, nil)?.takeRetainedValue() {
            if let mimetype = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() {
                return mimetype as String
            }
        }
        return "application/octet-stream"
    }
    
    var containsImage: Bool {
        let mimeType = self.mimeType()
        guard let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, mimeType as CFString, nil)?.takeRetainedValue() else {
            return false
        }
        return UTTypeConformsTo(uti, kUTTypeImage)
    }
    
    var containsAudio: Bool {
        let mimeType = self.mimeType()
        guard let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, mimeType as CFString, nil)?.takeRetainedValue() else {
            return false
        }
        return UTTypeConformsTo(uti, kUTTypeAudio)
    }
    
    var containsVideo: Bool {
        let mimeType = self.mimeType()
        guard  let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, mimeType as CFString, nil)?.takeRetainedValue() else {
            return false
        }
        return UTTypeConformsTo(uti, kUTTypeMovie)
    }
}
EN

回答 2

Stack Overflow用户

发布于 2021-11-24 13:56:36

我的初始URL扩展的iOS15兼容重写如下所示:

代码语言:javascript
运行
复制
import UniformTypeIdentifiers

extension URL {
    func mimeType() -> String {
        let pathExtension = self.pathExtension
        if let type = UTType(filenameExtension: pathExtension) {
            if let mimetype = type.preferredMIMEType {
                return mimetype as String
            }
        }
        return "application/octet-stream"
    }
    
    var containsImage: Bool {
        let mimeType = self.mimeType()
        if let type = UTType(mimeType: mimeType) {
            return type.conforms(to: .image)
        }
        return false
    }
    
    var containsAudio: Bool {
        let mimeType = self.mimeType()
        if let type = UTType(mimeType: mimeType) {
            return type.conforms(to: .audio)
        }
        return false
    }
    
    var containsMovie: Bool {
        let mimeType = self.mimeType()
        if let type = UTType(mimeType: mimeType) {
            return type.conforms(to: .movie)   // ex. .mp4-movies
        }
        return false
    }
    
    var containsVideo: Bool {
        let mimeType = self.mimeType()
        if let type = UTType(mimeType: mimeType) {
            return type.conforms(to: .video)
        }
        return false
    }
}
票数 3
EN

Stack Overflow用户

发布于 2021-10-15 11:36:40

为了与get right UUType的iOS 15和更早版本兼容,由于kUTType已被弃用,因此可以使用以下代码

代码语言:javascript
运行
复制
var UTTypeID : Array = [ "url", "data", "plainText"]

 // iOS 15 Deprecated kUTType, use UTType
func UTTypeCompat(strID : String) -> String
{
    //0 - URL, 1 - Data, 2 - PlainText
    let indexUTType:Int? = UTTypeID.firstIndex(of: strID)
    
    if #available(iOS 15.0, *)
    {
        switch indexUTType {
        case 0:
            return UTType.url.identifier
        case 1:
            return UTType.data.identifier
        case 2:
            return UTType.plainText.identifier
        default:
            NSLog("Unsupported UUtype: \(strID)")
            break
        }
    }
    else
    {
        switch indexUTType {
        case 0:
            return kUTTypeURL as String
        case 1:
            return kUTTypeData as String
        case 2:
            return kUTTypePlainText as String
        default:
            NSLog("Unsupported UUtype: \(strID)")
            break
        }
    }
    // throw Exception
    return "Err"
}

和示例如何获取任何版本的iOS的标识符

代码语言:javascript
运行
复制
    NSLog(UTTypeCompat(strID: "url"))
    NSLog(UTTypeCompat(strID: "data"))
    NSLog(UTTypeCompat(strID: "plainText"))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69540672

复制
相关文章

相似问题

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