我正在构建一个简单的主题引擎,并希望添加一个扩展,将 UISwipeGestureRecognizer
添加到 UIViewController
。
这是我的代码:
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)
}
}
当然,编译器找不到#selector(Self.switchCurrentTheme)
,因为它没有通过@objc
指令公开。 我的扩展中是否可以添加此行为?更新:Theme是Swift枚举,因此我无法在Themeable协议前添加@objc。