Ich baue eine einfache Theme-Engine und hätte gerne eine Erweiterung, die UISwipeGestureRecognizer
zu UIViewController
Hier ist mein Code:
%Vor% Natürlich kann der Compiler #selector(Self.switchCurrentTheme)
nicht finden, da er nicht über die @objc
-Direktive verfügbar gemacht wird. Ist es möglich, dieses Verhalten meiner Erweiterung hinzuzufügen?
UPDATE: Theme
ist eine Swift-Enumeration, daher kann ich @objc
nicht vor Themeable
protocol
Die sauberste funktionierende Lösung, die ich mir vorstellen konnte, war eine private Erweiterung auf UIViewController
mit der fraglichen Methode zu definieren. Durch Begrenzen des Bereichs auf private
wird der Zugriff auf diese Methode in der Quelldatei isoliert, in der das Protokoll definiert ist. So sieht es aus:
Ich bin mir nicht sicher, aber Sie können darauf zugreifen wie
%Vor%oder Sie können diesen Link verwenden, um es zu versuchen Besuchen Sie Wie verwenden Sie #selector (myMethodName) in einer Protokollerweiterung?
Ich habe eine Lösung gefunden. Mag nicht der perfekte sein, aber es funktioniert.
Da ich Themeable
protocol nicht als @objc
definieren kann, weil es Swift-only enum
verwendet, habe ich mich entschieden, die Methode zu verschieben, die ich zum "elterlichen" Protokoll aufrufen möchte, und dieses Protokoll als @objc
definieren. Es scheint, als ob es funktioniert, aber ich mag es nicht wirklich, um ehrlich zu sein ...
Tags und Links ios swift swift2 protocol-extension