2016-07-21 14 views
5

Próbuję wywołać metodę przez rozszerzenie jednego z moich niestandardowych UIViews, ale pojawia się błąd "Wartość typu" MyCustomView "nie ma członka" testMethod "". Poniżej jest mój kodNie można wywołać metody z rozszerzenia 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() 
    } 
    } 
} 

Oczywiście mogłaby wdrożyć tę funkcjonalność kilka różnych sposobów, ale jestem bardziej zainteresowany dlaczego konkretnie ten kod nie będzie kompilować, ponieważ wydaje się logicznie poprawne do mnie. Cała pomoc jest bardzo doceniana.

+0

Twój kod kompiluje się dobrze dla mnie, poza brakującym '}' – dan

+0

Naprawiono klamrę, dziękuję. To jest takie dziwne. Próbowałem usunąć wyprowadzone dane i zrezygnować z Xcode i zrestartować, ale nadal nie będzie się kompilować. Musi to być coś z istniejącą architekturą, a następnie poprawnie @dan? – Amloelxer

+0

Przeniesienie rozszerzenia z oddzielnego pliku do tej samej klasy co MyCustomView rozwiązuje problem, ale nie jest to coś, co wolałbym robić w architekturze, i niestety wciąż nie odpowiada na pytanie, dlaczego nie skompiluje się w pierwszej kolejności. . – Amloelxer

Odpowiedz

0

Może to mieć coś wspólnego z tym, że UIView to klasa Objective-C, a sposób wysyłki różni się nieco od klas Swift.

Być może trzeba będzie zadeklarować metodę rozszerzenia za pomocą dyrektywy dynamicznej, aby spełnić mechanizm wysyłki metody Obj-C.

(nie próbowałem to przeszkadza ci)

0

Jedyną odpowiedzią mogę myśleć jest to, że rozszerzenie pliku nie jest członkiem celu kompilujesz. Wybierz plik z kodem rozszerzenia i spójrz na Docelowe członkostwo w inspektorze plików, upewnij się, że Twój cel jest zaznaczony. Jeśli plik nie znajduje się w folderach projektu, być może będziesz musiał go tam przenieść, aby wyświetlić sekcję Docelowe członkostwo.