Skip to content

Instantly share code, notes, and snippets.

@dimazen
Created January 27, 2017 16:52
Show Gist options
  • Save dimazen/5831744c7a6badcc713d10610451040a to your computer and use it in GitHub Desktop.
Save dimazen/5831744c7a6badcc713d10610451040a to your computer and use it in GitHub Desktop.
fileprivate class HandlerShim: NSObject {
let handler: (UIGestureRecognizer) -> Void
init(_ handler: @escaping (UIGestureRecognizer) -> Void) {
self.handler = handler
}
func invoke(sender: UIGestureRecognizer) {
handler(sender)
}
}
extension UIGestureRecognizer {
func addHandler(handler: @escaping (UIGestureRecognizer) -> Void) {
let handlerShim = HandlerShim(handler);
let key = UnsafeRawPointer(bitPattern: unsafeBitCast(handlerShim, to: Int.self))
// уникальный key даст возможность цеплять много обработчиков, но их нельзя удалить
objc_setAssociatedObject(self, key, handlerShim, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
addTarget(handler, action: #selector(HandlerShim.invoke(sender:)))
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment