这个问题可能有点奇怪,有没有办法根据 iOS 版本有条件地进行子类化,本质上是:
if(iOS version >= 9) {
@interface CDVWKWebViewEngine : CDVPlugin <CDVWebViewEngineProtocol, WKScriptMessageHandler, WKNavigationDelegate>
} else if(iOS version = 8) {
@interface CDVWKWebViewEngine : CDVPlugin <WKScriptMessageHandler, WKNavigationDelegate>
}
我有 iOS Cordova WkWebView Engine plugin并想回退到 iOS 8 下的 UIWebView(忽略 iOS 8 上的插件)。
我发现有条件地使用这个插件是相当棘手的,因为一旦它继承了 UIWebView 默认插件,它就深深地根植于项目中。
有针对不同版本定义的预处理器宏
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000
// code to compile for iOS 9 or greater
#else
// code to compile for les than iOS 9
#endif
如果您想在运行时做出决定,可以使用 -systemVersion
(UIDevice
) .
当然,在运行时编译一个不同的类是不可能的,就像你在 Q 中想要的那样。有两种方法来处理它:
在运行时创建一个类。这样做,您需要编译方法中的整个代码并将其放在一起。
在运行时从已编译的类中选择正确的类(或 Brandon 建议的代码片段)。
有不同的方法可以做到这一点。如果它适合您的结构,您可以拥有一个基类和两个私有(private)子类,并在您决定在基类中创建实例时,决定创建和交付哪个子类的哪个实例。
关于ios - 基于 iOS 版本的条件子类化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37633801/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |