rx.tapを自前で生やす


RxSwiftのReactiveに対してextensionを生やすことで、rx.hogeを生やす事ができる。


extension Reactive where Base: Button {
  var tap: Observable<Void> {
    return base.tapped
  }
}

final class Button: UIView {
  fileprivate let tapped = PublishSubject<Void>()

  override func touchesEnded(_ touches: [UITouch]) {
    tapped.onNext()
  }
}

こんな感じで実装する。

button.rx.tap.subscribe()

こんな感じで使う。

これのいいところ

・RxCocoaの記法と同じなので、見栄えが良い。
・PublishSubjectのtappedをクラス内に隠蔽出来るため、外からtappedを呼ぶ事故が防げる