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 = <insert calculation here>
menu.width = menuWidth
</code></pre>
<p>我这样做了:</p>
<pre><code>let menuWidth = <insert calculation here>
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]