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

我正在使用两个pod: DropDownSwiftyUtils

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

 public var width: CGFloat? { didSet { setNeedsUpdateConstraints() } } 

另一方面, SwiftyUtils为所有UIView添加了扩展。 在扩展中,还有一个width属性。 这个 width属性只是返回frame.width以便人们可以编写更少的代码。 它的定义如下:

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

当我尝试使用DropDwon定义的width属性设置DropDown的菜单宽度时DropDwon 。 编译器认为我的意思是在SwiftyUtils模块的扩展中定义的width属性。

我怎么能告诉编译器我的意思是DropDownwidth ,而不是SwiftyUtilswidth

我通过一个小技巧解决了这个问题。

DropDownwidthCGFloat?类型的CGFloat? ,但SwiftyUtilswidthCGFloat类型。 这意味着如果我传递一个可选的CGFloat ,编译器就会明白我的意思是DropDownwidth

所以不要这样做:

 let menuWidth =  menu.width = menuWidth 

我这样做了:

 let menuWidth =  menu.width = menuWidth as CGFloat?