Typed rx_event for UIGestureRecognizer

This commit is contained in:
Yury Korolev 2016-05-02 13:36:09 +03:00
parent c2ad533b1d
commit 3e1b2d0789
1 changed files with 15 additions and 7 deletions

View File

@ -15,15 +15,15 @@ import RxSwift
// This should be only used from `MainScheduler`
class GestureTarget: RxTarget {
typealias Callback = (UIGestureRecognizer) -> Void
class GestureTarget<Recognizer: UIGestureRecognizer>: RxTarget {
typealias Callback = (Recognizer) -> Void
let selector = #selector(ControlTarget.eventHandler(_:))
weak var gestureRecognizer: UIGestureRecognizer?
weak var gestureRecognizer: Recognizer?
var callback: Callback?
init(_ gestureRecognizer: UIGestureRecognizer, callback: Callback) {
init(_ gestureRecognizer: Recognizer, callback: Callback) {
self.gestureRecognizer = gestureRecognizer
self.callback = callback
@ -51,13 +51,21 @@ class GestureTarget: RxTarget {
}
}
extension UIGestureRecognizer {
public protocol Rx {
}
extension UIGestureRecognizer: Rx {
}
extension Rx where Self: UIGestureRecognizer {
/**
Reactive wrapper for gesture recognizer events.
*/
public var rx_event: ControlEvent<UIGestureRecognizer> {
let source: Observable<UIGestureRecognizer> = Observable.create { [weak self] observer in
public var rx_event: ControlEvent<Self> {
let source: Observable<Self> = Observable.create { [weak self] observer in
MainScheduler.ensureExecutingOnScheduler()
guard let control = self else {