Swift 5.8 旧版本 API 兼容

560 阅读1分钟

@backDeployed

Swift 5.8 引入了一个新关键字 @backDeployed ,它允许 Framework 或 Libray 作者将函数反向部署到旧版本的操作系统。

在 Swift 5.8 之前

Swift 的系统库,大多作为动态库分发,这些库的维护者使用 @available 标注来指示引入的函数声明的操作系统版本。

比如前面介绍的 如何在项目中使用 SFSafariViewController,在 iOS 15 中新增的功能:

@available(iOS 15.0*)
open class func prewarmConnections(to URLs: [URL]) -> SFSafariViewController.PrewarmingToken

表明这个函数只有在 iOS 15 及以上版本才能够被使用,使用的时候要做版本判断:

if #available(iOS 15.0*) {
 let token = SFSafariViewController.prewarmConnections(to: [URL(string: "https://apple.com")!])
}

backDeployed 的使用

@backDeployed 是一个新属性,它允许框架或库作者为较旧的操作系统版本提供回退实现,并允许 API 使用者在没有任何条件判断的情况下使用它。

例如,如果 Apple 决定在 15 之前将 prewarmConnections 函数反向部署到 iOS,他们可以像这样声明 prewarmConnections 函数的反向部署实现。

@available(iOS 10.0, *)
@backDeployed(before: iOS 15.0)
open class func prewarmConnections(to URLs: [URL]) -> SFSafariViewController.PrewarmingToken {
 // 旧版本的实现
}

如果苹果这么实现了此反向部署版本,则在使用的时候无需再进行任何版本判断。

let token = SFSafariViewController.prewarmConnections(to: [URL(string"https://apple.com")!])

在运行的时候,Swift 系统会根据当前设备的版本,选择一个可用的实现。

点击下方公众号卡片,关注我,每天分享一个关于 iOS 的新知识

本文同步自微信公众号 “iOS新知”,每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!