我建立簡單的主題引擎,並希望有一個擴展,它增加了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
指令公開。是否有可能將此行爲添加到我的擴展?
UPDATE:Theme
是斯威夫特枚舉,所以我不能在前面加@objc
Themeable
協議
@OgreSwamp是它爲你工作? –
您的解決方案不起作用。您提供的鏈接解決方案也不適用於我。它描述了非常具體的情況 - 在方法調用之前等待。是的,你可以避免在那裏使用objc目標/動作模式,但據我所知沒有其他方式來添加手勢監聽器。 – OgreSwamp