LoginSignup
9
8

More than 3 years have passed since last update.

【Swift】RxSwiftでボタンのタップイベントを拾う

Last updated at Posted at 2020-05-17

RxSwiftはボタンのタップイベントとTableView CollecrionViewの実装が格段に楽になるので大好きです。
今回はボタンのタップイベントの実装をいくつかご紹介します。

subscribe(_ on:)を使う

subscribe(_ on:)の説明

`Subscribes an event handler to an observable sequence.

  • parameter on: Action to invoke for each event in the observable sequence.
  • returns: Subscription object used to unsubscribe from the observable sequence.
    つまり監視できるもののイベントを拾えるのです。 これを使ってButton`のタップイベントを拾うとこんな感じになります。
button.rx.tap.subscribe({ [weak self] _ in
    // ボタンタップでキックしたいアクションを記述
    }).disposed(by: disposeBag)

[weak self][unowned self]でももちろんOKですが、私は管理が面倒なので[weak self]を使うことが多いです。
循環参照一度起こすと結構調査が面倒だし、平気でクラッシュするから脳筋weakしちゃうんですよね。。

[weak self]と[unowned self]についてはこちらの記事が面白かったです

bind(to observers:)を使う

私は普段この実装方法を取り入れていることが多いです。

private func setButton() {
    button.rx.tap.bind(to: buttonTapBinder).disposed(by: disposeBag)
}

private var buttonTapBinder: Binder<()> {
    return Binder(self) { base, _  in
        base.button.isSelected = !base.button.isSelected
    }
}

Binderを使用しているので、循環参照は自ずと防がれるので結構使ってます。
subscribeの実装もそうですが、どちらもボタンのタップだけではなく、他のイベントの監視もできるのでぜひ応用してみてください!

RxSwiftに関する記事

【Swift】RxSwiftを使ったTableViewの実装(Delegate/reloadDataは使わない!)

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8