菜鸟教程小白 发表于 2022-12-13 03:02:31

ios - Objective-C:在可空性注释违规时强制编译错误


                                            <p><p><strong>背景</strong></p>

<p>我们一直在开发公共(public)动态 iOS/macOS 框架。该框架是用 Objective-C 编写的,但它与 Swift 完全兼容。</p>

<p>最近,我们为我们的一种公共(public) API 方法更改了可空性注释:</p>

<p>来自</p>

<pre><code>- (void)setServer:(nullable ABCLocation *)location;
</code></pre>

<p>到</p>

<pre><code>- (void)setServer:(nonnull ABCLocation *)location;
</code></pre>

<p>,因此开发人员需要创建 <code></code> 实例并将其传递给新的 API。 </p>

<p><strong>问题</strong></p>

<p>现在,我们关心的是,如何强制/通知开发人员围绕我们的新 API 更改他们现有的代码? </p>

<p>将 API 与 <em>Swift</em> 一起使用时,它似乎可以通过抛出错误很好地处理可空性。</p>

但是,<p><em>Objective-C</em> 仅在传递 <code>nil</code> 时生成警告,而 Xcode 什么也不做,当开发人员将 <code>nullable</code> 属性传递给方法。 </p>

<p>我们如何强制开发人员更改他们的 API?这里的常见做法是什么?</p>

<p><strong>UPD:</strong></p>

<p>我们将框架作为二进制文件分发,使用 <em>Release</em> 配置构建,其中关闭了断言。</p>

<p><strong>UPD #2:</strong></p>

<p>到目前为止,我们已经接受了从 Objective-C 使用 API 的现实。但是,我们实现了“故障安全”行为:如果传递了 <code>nil</code>,则该方法在内部创建 <code></code> 实例并隐式传递它。 </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>在未满足注释时生成警告是一种很好的做法。在 API 中进行 <code>nullable</code> -> <code>nonnull</code> 之类的更改是不行的。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - Objective-C:在可空性注释违规时强制编译错误,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/46823907/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/46823907/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - Objective-C:在可空性注释违规时强制编译错误