📖
【学習備忘録】delegateを使ったCounterアプリ
はじめに
「比較して学ぶ RxSwift4 入門」のCounterアプリのコードをもとに学習しました。
比較材料であるdelegateを使ったCounterアプリです。
サンプルコード
完成
1. CounterDelegate
- プロトコルでcountをアップデートするメソッドを定義。
protocol CounterDelegate {
func updateCount(count: Int)
}
2. CounterPresenter
- countの数字が変更されるとupdateCountが呼ばれるようにプロパティをかく。
- attachViewでViewControllerと接続するためのメソッドを記載。
- それぞれに対応する処理(カウントアップ・ダウン・リセット)を記載。
class CounterPresenter {
private var count = 0 {
didSet {
delegate?.updateCount(count: count)
}
}
private var delegate: CounterDelegate?
func attachView(_ delegate: CounterDelegate) {
self.delegate = delegate
}
func detachView() {
self.delegate = nil
}
func incrementCount() {
count += 1
}
func decrementCount() {
count -= 1
}
func resetCount() {
count = 0
}
}
3. ViewController
- viewDidLoad()内でattachView()を呼ぶ。selfでViewController自身を指し示す。
- extentionでupdateCount()の処理(変更を画面に反映させる)を記載。
- @IBAction内でそれぞれに対応する処理を記載。
class ViewController: UIViewController {
@IBOutlet weak var countLabel: UILabel!
private let presenter = CounterPresenter()
override func viewDidLoad() {
super.viewDidLoad()
presenter.attachView(self)
}
@IBAction func countUp(_ sender: Any) {
presenter.incrementCount()
}
@IBAction func countDown(_ sender: Any) {
presenter.decrementCount()
}
@IBAction func resetCount(_ sender: Any) {
presenter.resetCount()
}
}
extension ViewController: CounterDelegate {
func updateCount(count: Int) {
countLabel.text = String(count)
}
}
GitHub
参考にしたもの
1.比較して学ぶRxSwift入門
さいごに
シンプルなアプリでは、RxSwiftを使うよりもこのようなコードのかき方の方が圧倒的にわかりやすいと感じました。
間違いや認識違いがあれば指摘いただければ幸いです。
Discussion