扩展程序隐藏了我想要访问的属性。 解决方法?
我正在使用两个pod: DropDown
和SwiftyUtils
。
DropDown
添加了一个名为DropDown
的UIView
子类。 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
属性。
我怎么能告诉编译器我的意思是DropDown
的width
,而不是SwiftyUtils
的width
?
我通过一个小技巧解决了这个问题。
DropDown
的width
是CGFloat?
类型的CGFloat?
,但SwiftyUtils
的width
是CGFloat
类型。 这意味着如果我传递一个可选的CGFloat
,编译器就会明白我的意思是DropDown
的width
。
所以不要这样做:
let menuWidth = menu.width = menuWidth
我这样做了:
let menuWidth = menu.width = menuWidth as CGFloat?