Ich baue einfaches Thema Motor und möchte eine Erweiterung haben, die hier UISwipeGestureRecognizer
-UIViewController
Aufruf Wähler von Protokollerweiterung
fügt ist mein Code:
protocol Themeable {
func themeDidUpdate(currentTheme: Theme) -> Void
}
extension Themeable where Self: UIViewController {
func switchCurrentTheme() {
Theme.switchTheme()
themeDidUpdate(Theme.currentTheme)
}
func addSwitchThemeGestureRecognizer() {
let gestureRecognizer = UISwipeGestureRecognizer(target: self, action:#selector(Self.switchCurrentTheme))
gestureRecognizer.direction = .Down
gestureRecognizer.numberOfTouchesRequired = 2
self.view.addGestureRecognizer(gestureRecognizer)
}
}
Natürlich Compiler nicht #selector(Self.switchCurrentTheme)
finden wie es nicht über @objc
Direktive ausgesetzt ist. Ist es möglich, dieses Verhalten meiner Erweiterung hinzuzufügen?
UPDATE:Theme
ist ein Swift-Enumeration, also kann ich nicht @objc
vor Themeable
Protokoll hinzufügen
@OgreSwamp ist es für Sie gearbeitet? –
Ihre Lösung funktioniert nicht. Lösung auf dem von Ihnen angegebenen Link funktioniert auch nicht für mich. Es beschreibt eine sehr spezifische Situation - warten vor Methodenaufruf. Ja, Sie können vermeiden, objc target/action pattern dort zu verwenden, aber es gibt keine andere Möglichkeit, gestikulierte Listener hinzuzufügen, soweit ich weiß. – OgreSwamp