SwiftBondを勉強するために作ったサンプルプロジェクトです。 SwiftBond →https://github.com/SwiftBond/Bond
- 1_HelloBond
- Observable と map() と bindTo()だけを使って触ってみたサンプル
- 2_PostQuestion
- QAサイトに投稿する画面っぽいものを、SwiftBondで作ってみたサンプル
記録としてのメモ書きです。飽きるまで増えていきます。
-
画面のロジックを、「イベントの変換」として「繋げていく」やり方はとても良いと思う。
- ロジックを「箱と線」で表現しやすいので、図にしやすい
-
簡単にbindTo()で繋げる事ができるため、ここが混線する事がある。
- とくに1つのObservableに対して複数からbindTo()すると、どのEventで値が変わったのかがわかりにくくなる。
- NSNotificationCenterを乱用した時と同じような複雑さが発生しうる。
- また簡単にループも作れてしまう。最悪無限ループに陥る?
-
混線しないように、設計段階での方針が重要になると思われます。
- 主役のObservableを決め、他は「それに追従する」ようにした方が良さそう。王は二人要らない。
- クラスのプロパティとして公開するObservableは最小にした方が良さそう
-
Observableについて
- Observableは、「T型の値を保持し、新しい値が代入されたら通知を飛ばす」もの。
- Tはいろいろ。StringやIntやMyEnum。Optional型も入る
- 新しい値の代入は、Observable.next()で行う。
- String型やInt型が、通知を飛ばしているわけではなくて、ラッピングしているObservableが飛ばしている。
- Observableは、ありとあらゆる「変数」「プロパティ」として使えてしまうが、使いすぎると混乱する
- クラスのプロパティにObservableを並べるのは、オススメしない。。。。混線して後悔しました。
- Observableは、「T型の値を保持し、新しい値が代入されたら通知を飛ばす」もの。
-
仕組みは、GoFのObserverパターンの派生系に見える。
- GoFパターンの「Subject」がSwiftBondの「Observable」に該当? EventProducerかもしれない?
- GoFパターンの「Subject」が、「Observer」の役割も持つので、繋げる事が出来ている?
-
まだ良くわかっていない事:
- disposeBag()はまだ良くわかっていない。bindToで「配線した」ルールを「切断」するためのモノだと思うけど。
- リアクティブプログラミングで「ストリーム」と呼ばれているモノは、SwiftBondで言うObservableに該当しそう。「時間軸」は.next()
- 言葉の揺らぎ:田村的には、bindTo()やobserve()は「接続する」「配線する」という、ケーブルの配線に例えるのがしっくりきているが、この辺どうなのだろう?
-
これから調べていきたい:
- Observable->map->bindTo した時と、イベントが発生した時に、どんな処理が行われるのか。
- 用意されている変換(transform)のバリエーション(mapやfilter等など)
- ObservableやEventProducerの関係。なんとなく「EventProducer」の方が重要な気がする。
- 画面の「動き」にBondが使えるかどうか。アニメーションとか。