菜鸟教程小白 发表于 2022-12-11 18:55:42

ios - 扩展隐藏了我想要访问的属性。解决方法?


                                            <p><p>我正在使用两个 pod:<a href="https://github.com/AssistoLab/DropDown" rel="noreferrer noopener nofollow"><code>DropDown</code></a>和 <a href="https://github.com/tbaranes/SwiftyUtils" rel="noreferrer noopener nofollow"><code>SwiftyUtils</code></a> .</p>

<p><code>DropDown</code> 添加了一个名为 <code>DropDown</code> 的 <code>UIView</code> 子类。 <code>DropDown</code> 类定义了自己的 <code>width</code> 属性。客户端代码必须使用此属性设置下拉菜单的宽度,而不是设置 <code>frame</code>。它是这样定义的:</p>

<pre><code>public var width: CGFloat? {
    didSet { setNeedsUpdateConstraints() }
}
</code></pre>

另一方面,<p><code>SwiftyUtils</code> 为所有 <code>UIView</code> 添加了扩展。在扩展中,还有一个 <code>width</code> 属性。 <em>这个</em> <code>width</code> 属性只是简单地返回 <code>frame.width</code> 以便人们可以编写更少的代码。它是这样定义的:</p>

<pre><code>public var width: CGFloat {
    get { return frame.width }
    set { frame = frame.with(width: newValue) } // frame.with() is defined in SwiftyUtils as well
}
</code></pre>

<p>当我尝试使用 <code>DropDwon</code> 中定义的 <code>width</code> 属性设置 <code>DropDown</code> 的菜单宽度时,问题就出现了。编译器认为我的意思是 <code>SwiftyUtils</code> 模块的扩展中定义的 <code>width</code> 属性。</p>

<p>如何告诉编译器我的意思是 <code>DropDown</code> 中的 <code>width</code>,而不是 <code>SwiftyUtils</code> 中的 <code>width</code></code>?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我通过一个小技巧解决了这个问题。</p>

<p><code>DropDown</code>中的<code>width</code>是<code>CGFloat?</code>类型,但是<code>SwiftyUtils<中的<code>width</code>/code> 是 <code>CGFloat</code> 类型。这意味着如果我传递一个可选的 <code>CGFloat</code>,编译器会理解我的意思是 <code>DropDown</code> 中的 <code>width</code>。</p>

<p>所以不要这样做:</p>

<pre><code>let menuWidth = &lt;insert calculation here&gt;
menu.width = menuWidth
</code></pre>

<p>我这样做了:</p>

<pre><code>let menuWidth = &lt;insert calculation here&gt;
menu.width = menuWidth as CGFloat?
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 扩展隐藏了我想要访问的属性。解决方法?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/42174748/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/42174748/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 扩展隐藏了我想要访问的属性。解决方法?