2017-02-11 4 views
2

두 개의 광고 모음 (DropDownSwiftyUtils)을 사용하고 있습니다.확장 프로그램이 액세스하려는 속성을 숨 깁니다. 해결 방법은 무엇입니까?

DropDownDropDown이라는 UIView 하위 클래스에 추가됩니다. DropDown 클래스는 자체 width 속성을 정의합니다. frame을 설정하는 대신 클라이언트 코드는이 속성을 사용하여 드롭 다운 메뉴의 너비를 설정해야합니다. 그것은 다음과 같이 정의된다 :

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

SwiftyUtils는 다른 한편으로는, 모든 UIView들에 대한 확장을 추가했습니다. 확장 기능에는 width 속성도 있습니다. 속성은 사람들이 적은 코드를 작성할 수 있도록 단순히 frame.width을 반환합니다. 다음과 같이 정의된다 : 나는 DropDwon에 정의 된 width 속성을 사용하여 DropDown의 메뉴 폭을 설정하려고하면

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

문제가 온다. 컴파일러는 width 속성이 SwiftyUtils 모듈의 확장에 정의 된 것을 의미한다고 생각합니다.

컴파일러에게 widthDropDown이고 widthSwiftyUtils이 아니라고 말할 수 있습니까?

답변

0

이 문제는 약간의 트릭으로 해결되었습니다.

DropDownwidth 유형의 CGFloat?이지만 SwiftyUtils에서 widthCGFloat이다. 즉, 옵션 CGFloat을 전달하면 컴파일러는 widthDropDown에 포함한다는 것을 이해합니다.

그래서 그 대신이 일을 :

let menuWidth = <insert calculation here> 
menu.width = menuWidth as CGFloat? 
:

let menuWidth = <insert calculation here> 
menu.width = menuWidth 

을 내가 이런 짓을