2016-07-21 6 views
5

Ich versuche, eine Methode aufzurufen, indem Sie eine meiner benutzerdefinierten UIViews erweitern, aber ich erhalte den Fehler "Wert des Typs 'MyCustomView' hat kein Mitglied 'testMethod'". Unten ist mein CodeIch kann nicht Methode aus UIView-Erweiterung aufrufen

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() 
    } 
    } 
} 

Offensichtlich konnte ich diese Funktionalität eine Reihe von verschiedenen Arten implementieren, aber ich bin mehr daran interessiert, warum dieser Code speziell nicht kompiliert werden, weil es mir logisch richtig zu sein scheint. Alle Hilfe wird sehr geschätzt.

+0

Ihr Code kompiliert für mich andere als die fehlende '}' – dan

+0

Fixed die Klammer danke. Das ist so komisch. Ich habe versucht, abgeleitete Daten zu löschen und Xcode und Neustart zu beenden, aber es wird immer noch nicht kompilieren. Es muss etwas mit der vorhandenen Architektur dann richtig @dan sein? – Amloelxer

+0

Das Verschieben der Erweiterung von einer eigenen separaten Datei in die gleiche Klasse wie MyCustomView löst das Problem, aber ich würde es vorziehen, dies architektonisch zu tun, und beantwortet leider immer noch nicht meine Frage, warum es überhaupt nicht kompiliert wird . – Amloelxer

Antwort

0

Dies kann etwas mit der Tatsache zu tun haben, dass UIView eine Objective-C-Klasse ist und die Methodenverteilung unterscheidet sich geringfügig von reinen Swift-Klassen.

Möglicherweise müssen Sie die Methode der Erweiterung mit der dynamischen Anweisung deklarieren, um den Methodenversandmechanismus von Obj-C zu erfüllen.

(ich habe es nicht versucht, etwas dagegen)

0

Die einzige Antwort, die ich denken kann, ist, dass der Erweiterungsdatei Sie kompilieren nicht Mitglied des Ziels ist. Wählen Sie die Datei mit dem Erweiterungscode aus, und überprüfen Sie im Dateiinspektor die Option Zielmitgliedschaft. Vergewissern Sie sich, dass das Ziel aktiviert ist. Wenn sich die Datei nicht in den Projektordnern befindet, müssen Sie sie möglicherweise dorthin verschieben, um den Abschnitt Zielmitgliedschaft anzuzeigen.

Verwandte Themen