OGeek|极客世界-中国程序员成长平台

标题: ios - 基于 iOS 版本的条件子类化 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 11:32
标题: ios - 基于 iOS 版本的条件子类化

这个问题可能有点奇怪,有没有办法根据 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 默认插件,它就深深地根植于项目中。



Best Answer-推荐答案


有针对不同版本定义的预处理器宏

#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 中想要的那样。有两种方法来处理它:

有不同的方法可以做到这一点。如果它适合您的结构,您可以拥有一个基类和两个私有(private)子类,并在您决定在基类中创建实例时,决定创建和交付哪个子类的哪个实例。

关于ios - 基于 iOS 版本的条件子类化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37633801/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4