菜鸟教程小白 发表于 2022-12-13 12:04:26

ios - 使用扩展将 Swift 类传播到多个文件中


                                            <p><p>我正在 Swift 中构建一个大型类,我想将它分布在多个文件中,因为它变得太大而无法有效地工作。它不能被子类化,因为它只是一个具有许多功能的类。 (我以后也许可以优化它并删除双重代码,但我仍然想实现这一点。)</p>

<p>为了使工作更容易,我想使用 Extensions 将类分散到多个 Swift 文件中。我已经部分实现了;通过在同一文件中创建扩展来扩展基类。这工作没有任何问题。</p>

<p>假设基础文件是 <em>BaseClass.Swift</em>(和类 <em>BaseClass</em>),我想将其扩展为 <em>BaseClassExtension.swift</em> ,我将以下内容放在 <em>BaseClassExtension.swift</em> 中:</p>

<pre><code>extension BaseClass {
    func doStuff() -&gt; String {
      return myVariable
    }
}
</code></pre>

<p>在 <em>BaseClass.swift</em> 我有 <code>private var myVariable = "I am a string"</code>,但在 <em>BaseClassExtension.swift</em> 我得到以下错误:<strong>使用未解析的标识符“myVariable”</strong></p>

<p>我尝试了以下方法:</p>

<ul>
<li>公开扩展程序</li>
<li>将 BaseClass 公开</li>
<li>将两者都公开</li>
<li>(默认情况下它们都是默认的(我猜是内部的?))</li>
</ul>

<p>当我从 <code>myVariable</code> 中删除 <code>private</code> 时,错误已解决,但我真的希望它是私有(private)的,因为它可能永远不会直接从类外部访问。 </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您必须将扩展名与您的类放在同一个文件中,因为 private 仅适用于该文件。</p>

<p>但是你可以这样做:</p>

<pre><code>private(set) myVariable: String
</code></pre>

<p>因此可以从您的扩展程序中访问 getter,但(至少)setter 仍然隐藏在此范围内。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 使用扩展将 Swift 类传播到多个文件中,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/33811299/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/33811299/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 使用扩展将 Swift 类传播到多个文件中