📖

【学習備忘録】callbackを使ったCounterアプリ

2022/05/18に公開

はじめに

「比較して学ぶ RxSwift4 入門」のCounterアプリのコードをもとに学習しました。
比較材料であるcallbackを使ったCounterアプリです。

サンプルコード

完成

1. ViewModel

  • countプロパティとカウントアップ・ダウン・リセットのメソッドを記載。
class CounterViewModel {
    private(set) var count = 0

    func incrementCount(callback: (Int) -> ()) {
        count += 1
        callback(count)
    }

    func decrementCount(callback: (Int) -> ()) {
        count -= 1
        callback(count)
    }

    func resetCount(callback: (Int) -> ()) {
        count = 0
        callback(count)
    }
}

2. ViewController

  • viewDidLoad()内でCounterViewModelをインスタンス化
  • @IBAction内でそれぞれに対応する処理を記載。
  • callbackで取得したcountをupdateCountLabelメソッドで画面に反映させる。
class ViewController: UIViewController {

    @IBOutlet weak var countLabel: UILabel!

    private var viewModel: CounterViewModel!

    override func viewDidLoad() {
        super.viewDidLoad()
        viewModel = CounterViewModel()
    }

    @IBAction func countUp(_ sender: Any) {
        viewModel.incrementCount { [weak self] count in
            self?.updateCountLabel(count)
        }
    }

    @IBAction func countDown(_ sender: Any) {
        viewModel.decrementCount { [weak self] count in
            self?.updateCountLabel(count)
        }
    }

    @IBAction func countReset(_ sender: Any) {
        viewModel.resetCount { [weak self] count in
            self?.updateCountLabel(count)
        }
    }

    private func updateCountLabel(_ count: Int) {
        countLabel.text = String(count)
    }
}

GitHub

https://github.com/MasakatsuTagishi/Practice-Callback-CounterApp

参考にしたもの

1.比較して学ぶRxSwift入門

https://www.amazon.co.jp/比較して学ぶRxSwift入門-技術の泉シリーズ(NextPublishing)-髙橋-凌-ebook/dp/B07LGMNXS3

さいごに

シンプルなアプリでは、RxSwiftを使うよりもこのようなコードのかき方の方が圧倒的にわかりやすいと感じました。
間違いや認識違いがあれば指摘いただければ幸いです。

Discussion