@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新知”,每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!