Swift 2 的可用性功能应该可以解决您的问题。在可用性方面,Swift 内置了对操作系统版本控制和符号可用性测试的支持。
首先,将构建设置中的部署目标设置为 iOS 8.3,并将基础 SDK 设置为最新。如果您在项目中使用仅在比您的部署目标(iOS 8.3)更新的操作系统中可用的符号(类、方法等),当您尝试构建时,Xcode 将在该行显示一条带有修复的错误消息并运行您的项目。
请参阅 The Swift Programming Language 一书中的控制流一章中的Checking API Availability。
可用性检查如下所示:
if #available (iOS 9, *) {
// use APIs only available on iOS 9 or later
} else {
// do nothing, don't show feature in UI, etc
}
这些是基础。在您问题的第二部分中,您正在寻找的是一种更大规模地处理 API 可用性的方法。为此,您可以使用 Swift 2 可用性特性的另一个特性,@available 属性。您可以将此属性应用于任何符号定义(例如,一个类),以标记该符号的定义需要某个最低操作系统版本。
您可以在整个类上使用@available 属性,而不是在使用iOS 9 API 的每个地方都使用可用性检查。然后,您只需要在您使用该课程的地方使用可用性检查。例如:
@available(iOS 9, *)
class MyAwesomeiOSNineFeature {
var myCoolObject = UICooliOSNineThing()
func doAwesomeStuff() {
// lots of code that uses iOS 9 stuff, no availability check
}
func doOtherStuff() {
// lots of code that uses iOS 9 stuff, no availability check
}
}
// In another class that doesn't have an `@available` requirement:
if #available(iOS 9, *) {
let feature = MyAwesomeiOSNineFeature()
feature.doAwesomeStuff()
} else {
// don't show UI for new feature
}