使用@available 有条件地创建一个类

sak*_*sak 5 ios swift

我有一个用例,其中创建一个类的两个实现非常有用:一个用于 iOS 7 及更低版本,另一个用于 8+。这似乎@available是我正在寻找的工具,但我不知道如何使它工作。

从文档看来,这应该是可能的:

@available(iOS 8.0, unavailable)
class MyCompatabilityClass : NSObject {
    //iOS 7 implementation
}

@available(iOS 8.0, *)
class MyCompatabilityClass : ClassOnlyAvailableInIOS8 {
    //iOS 8 implementation
}
Run Code Online (Sandbox Code Playgroud)

但是我Expected version number@available(iOS 8.0, unavailable). iOS 版本高于指定版本的条件类工作正常,但如何指定仅特定版本号以下编译的类?

mat*_*att 5

您不能取消声明类的存在,但可以弃用它。

此外,您不能两次声明同一个类,因此您的新类必须具有不同的名称。

因此:

@available(iOS, introduced=7.0, deprecated=8.0, message="Use MyCompatibilityClass2, please!")
class MyCompatabilityClass : NSObject {
    //iOS 7 implementation
}

@available(iOS 8.0, *)
class MyCompatabilityClass2 : NSObject { // or whatever the superclass is
    //iOS 8 implementation
}
Run Code Online (Sandbox Code Playgroud)