菜鸟教程小白 发表于 2022-12-12 11:32:27

ios - 基于 iOS 版本的条件子类化


                                            <p><p>这个问题可能有点奇怪,有没有办法根据 iOS 版本有条件地进行子类化,本质上是:</p>

<pre><code>if(iOS version &gt;= 9) {
   @interface CDVWKWebViewEngine : CDVPlugin &lt;CDVWebViewEngineProtocol, WKScriptMessageHandler, WKNavigationDelegate&gt;
} else if(iOS version = 8) {
   @interface CDVWKWebViewEngine : CDVPlugin &lt;WKScriptMessageHandler, WKNavigationDelegate&gt;
}
</code></pre>

<p>我有 iOS <a href="https://github.com/apache/cordova-plugin-wkwebview-engine" rel="noreferrer noopener nofollow">Cordova WkWebView Engine plugin</a>并想回退到 iOS 8 下的 UIWebView(忽略 iOS 8 上的插件)。</p>

<p>我发现有条件地使用这个插件是相当棘手的,因为一旦它继承了 UIWebView 默认插件,它就深深地根植于项目中。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>有针对不同版本定义的预处理器宏</p>

<pre><code>#if __IPHONE_OS_VERSION_MAX_ALLOWED &gt;= 90000
// code to compile for iOS 9 or greater
#else
// code to compile for les than iOS 9
#endif
</code></pre>

<p>如果您想在运行时做出决定,可以使用 <a href="https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIDevice_Class/#//apple_ref/occ/instp/UIDevice/systemVersion" rel="noreferrer noopener nofollow"><code>-systemVersion</code> (<code>UIDevice</code>)</a> . </p>

<p>当然,在运行时编译一个不同的类是不可能的,就像你在 Q 中想要的那样。有两种方法来处理它:</p>

<ul>
<li><p>在运行时创建一个类。这样做,您需要编译方法中的整个代码并将其放在一起。</p></li>
<li><p>在运行时从已编译的类中选择正确的类(或 Brandon 建议的代码片段)。 </p></li>
</ul>

<p>有不同的方法可以做到这一点。如果它适合您的结构,您可以拥有一个基类和两个私有(private)子类,并在您决定在基类中创建实例时,决定创建和交付哪个子类的哪个实例。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 基于 iOS 版本的条件子类化,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/37633801/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/37633801/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 基于 iOS 版本的条件子类化