2016-07-21 2 views
5

내 사용자 지정 UIView 중 하나를 확장하여 메서드를 호출하려고하는데 "형식 값 'MyCustomView'에 'testMethod'멤버가 없습니다."오류가 발생합니다. 다음은UIView 확장에서 메서드를 호출 할 수 없습니다.

extension MyCustomView { 
    func testMethod() { 
    //do stuff here 
    } 
} 

//in a separate class from the extension 
class func onMoreOptionsButtonPressed(currentViewController:UIViewController) { 
    for view in currentViewController.view.subviews { 
    if view.isKindOfClass(MyCustomView) { 
     let myCustomView = view as! MyCustomView 
     myCustomView.testMethod() 
    } 
    } 
} 

는 분명 내가이 기능을 여러 가지 방법으로 무리를 구현할 수 있지만, 나에게 논리적으로 올바른 것 때문에 나는,이 코드는 컴파일되지 않습니다 왜 특별히 더 관심이 내 코드입니다. 모든 도움은 대단히 감사하겠습니다.

+0

코드가 누락되었습니다. '}'이 (가) 누락되었습니다. – dan

+0

중괄호를 고쳐 주셔서 감사합니다. 그게 너무 이상해. 파생 데이터 삭제를 시도하고 Xcode를 종료하고 다시 시작했지만 여전히 컴파일되지 않습니다. 그것은 기존의 아키텍쳐를 가진 무언가 일 것입니다. – Amloelxer

+0

확장자를 별도의 파일에서 MyCustomView와 같은 클래스로 이동하면 문제가 해결되지만 구조적으로 수행하는 것이 더 바람직하지 않으며 불행히도 처음부터 컴파일되지 않는 이유에 대한 내 질문에 대답하지 않습니다 . – Amloelxer

답변

0

이것은 UIView가 Objective-C 클래스이고 메서드 발송이 순수 Swift 클래스와 약간 차이가 있다는 사실과 관련이있을 수 있습니다.

Obj-C의 메서드 디스패치 메커니즘을 충족 시키려면 dynamic 지시문을 사용하여 확장 프로그램의 메서드를 선언해야 할 수 있습니다.

내가 생각할 수있는 유일한 대답은 확장 파일은 컴파일 대상의 구성원이 아닌 것입니다

0

(나는 당신에게 마음을 시도하지 않았습니다). 확장 코드가있는 파일을 선택하고 파일 관리자에서 대상 멤버십을 확인하고 대상이 선택되었는지 확인하십시오. 파일이 프로젝트 폴더 안에 있지 않으면 대상 멤버십 섹션을 보려면 파일을 프로젝트 폴더로 이동해야 할 수 있습니다.

관련 문제