buduję Prosty system rozrywki i chciałby mieć rozszerzenie, które dodaje UISwipeGestureRecognizer
do UIViewController
Wywołanie selektor z rozszerzeniem protokołu
Oto mój kod:
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)
}
}
oczywiście kompilator nie może znaleźć #selector(Self.switchCurrentTheme)
ponieważ nie jest udostępniony poprzez dyrektywę @objc
. Czy jest możliwe dodanie tego zachowania do mojego rozszerzenia?
UPDATE:Theme
jest Swift enum, więc nie mogę dodać @objc
przed protokołu Themeable
@OgreSwamp jest to pracował dla Ciebie? –
Twoje rozwiązanie nie działa. Rozwiązanie podanego linku również nie działa dla mnie. Opisuje bardzo specyficzną sytuację - oczekiwanie przed wywołaniem metody. Tak, można uniknąć użycia celu docelowego/akcji objektu, ale nie ma innego sposobu na dodanie gestem słuchacza, o ile wiem. – OgreSwamp