iOSDC Japan 2016 参加メモ: A-2 RxSwiftは開発をどう変えたか
- ishkawaさん
RxSwift
イベントストリームを抽象化
- UIの変化やアクションなど
Observable
- イベントストリームを表す型
subscribe(_:)
- イベントごとにクロージャを実行
- イベントを受け取って実行できる
bindTo(_:)
- Observer
に自動反映する - イベントストリームに接続できる
- Observer
Observable と Observerは対になる概念
- 入出力の関係
Operator
- 実際の開発では、streamの間にOperatorを挟んで色々変換をしてデータを加工したりしていく
- map, filterなど
もう少しアプリらしい例
- 苗字と名前を入れてsubmitすると、くっついたフルネームがUILabelに反映される
- combineLatestとsample
- 複数のobservableを組み合わせ、sampleでタイミングを調整
Rx vs 従来のイメージ
Rx
- 水道のイメージ
- 蛇口と、それをバルブなどで調整してる
- 水道のイメージ
従来
- バケツのイメージ
- バケツにデータを貯めといて、それを取りに行く
- バケツのイメージ
Rxの概念とは
- 全てのイベントストリームの表現手段が同じ
- ためておいて後で取りに行く、という動作がない
- イベントストリームの依存関係がoperatorで表される
現在地の天気アプリの例
- 位置情報を許可すると、天気が出る
位置情報を拒否すると、NGと出る
コード紹介
- 従来のスタイルでデリゲートスタイルで書くと、パッと全体のフローを把握するのが難しい
- Rxのコードだと、処理の流れに沿ってコードが追える
- ここで何が起きてるのか、というのがそこを見ればわかる
複雑な制御がイベントストリームだけでかける
- 処理の依存関係が見えるようになった
まとめ
- イベントストリームを宣言的に扱えるようになった
- 複雑なイベントストリームでも全体を把握しやすい
- データを貯めなくて良くなり、ストアドプロパティを減らせる