RxSwiftでカウントアップするサンプル

2020.03.24

この記事の背景

「RxSwift??(聞いたことはあるけど...)」みたいな状態だったところから、少し理解が進んできたので、初学者向けに記事を書いてみました。
本記事は、RxSwift という名前を聞いたことがあり、どんなことができるか知りたいという方向けの内容です。RxSwift を使って、ボタンを押すとカウントアップするプログラムを組んでみました。なお、リアクティブプログラミングの詳しい解説は行いません。

簡単なサンプルプログラムの実装

  • 今回はハートボタン(favButton)が押されるとカウント回数表示(favCountLabel)が上がるサンプルアプリを作っていきます。
  • この機能だけの場合、IBActionを使って実装した方が簡単なのですが、解説のためRxSwiftを使っていきます。

ライブラリのインストール

Cocoapodsを使用してRxSwiftとRxCocoaの2つをインストールします。
RxCocoaはUIKitを使う時に必要なので、セットでインストールしましょう。

pod 'RxSwift'
pod 'RxCocoa'

画面の作成

プログラムの内容

import UIKit
import RxSwift
import RxCocoa

class ViewController: UIViewController {

    @IBOutlet weak var favCountLabel: UILabel!
    @IBOutlet weak var favButton: UIButton!
    
    private var favCount = 0
    
    private let disposeBag = DisposeBag()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        favButton.rx.tap
            .subscribe(onNext: {[unowned self] _ in
                self.favCount += 1
                self.favCountLabel.text = String(self.favCount)
            })
        .disposed(by: disposeBag)
    }
}

ハートをタップしてカウントが上昇していれば成功です。

プログラムの解説

  • 「rx.tap」はUIButtonに用意されている、ボタンがタップされたことを通知してくれるObservableです。
  • 「subscribe」は文字通り購読の意味で、対象に変化があった時に呼ばれます。今回はfavButtonがtapされる時。
  • 「onNext」はイベントが通常通りであるたびに通知します。他にもエラー時に通知するonError、完了時に通知するonCompletedがあります。
  • 「disposed」は購読の解除です。onNextの場合は、イベント後も購読が継続するため、メモリーリークになる恐れがあります。なのでdisposedで開放してあげる必要があります。

最後に

今回は簡単なサンプルアプリを通してRxSwiftについて解説していきました。
どなたかの参考になれば幸いです。