
RxSwiftでカウントアップするサンプル
2020.03.24
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
この記事の背景
「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について解説していきました。
どなたかの参考になれば幸いです。









