RxSwift勉強会@Sansan に、はじめて「ブログまとめ枠」として参加しましたので、だいぶ遅くなって申し訳ございませんがまとめたもの公開します。
以下すでに先行して他の方がまとめたもの
- http://matome.naver.jp/odai/2146067615056021001
- https://blog.ppen.info/wp/?p=357
- http://blog.mogmet.com/rxswift-sansan/
またRxSwiftの予習が足りず、誤りがある場合はよしなに編集リクエストいただけると嬉しいです
RxSwiftをプロダクトに導入してみた話
@kazu0620
- Eightに導入した話
- 「さわったことある人、挙手」で参加者のうち多くの人が手を挙げていた模様(席の都合上良く見えなかった)
- 宣言的に記述できる => 「こういうものが流れてきて、こういう処理をする」ということを定義しておくだけ、状態変数はもたない
- Rx自体は枯れた技術で2009年からある
- "RxSwift"で検索してたときに情報が見つからなくても、"Reactive Extensions"だったり他の言語で調べると大量に情報が出てきたりする
-
Eight
ではAndroidが先行してRxJava
を使っていて、そこの知見も活かせた - RxSwift独自の機能(
RxCococa
やDriver
、Variable
)が便利 - UIKitのプロパティにbindingできるのは
RxCococa
によるもの -
SubscribeOn
が勘違いしやすい - 設計については
Clean Architecture
を参考にした
15 minutes recipe of RxSwift
@gomi_ningen
RxSwiftのObserverまわりを15分でつくる話で、補足記事はこちら
- Observerパターンの復習
- Observer, Observableの定義
- BehaviorSubjectの実装
実装のポイントと思われる箇所
-
push
型のObserverパターンを用いる - Swiftのprotocolは、
generic type parameter
を持つことができない - 型消去のパターン(
try! Swift
でも発表があったとのこと)で回避 - AbstractClassにしたいところは
@noreturn
を用いて回避 - unsubscribeにおけるオブジェクトの特定方法に、Swiftの
unsafeAddressOf()
を用いる(RxSwiftのbag
でも用いられている)
補足
Introduction to RxMarbleQuiz
@nakailand
- オリジナルの図でRxMarblesを解説
- 数ある中で一番好きなオペレータはcombineLatest
- http://rxmarbles.com/
- RxQuiz(Github)
- Rxのキャラの名前を作者のTwitterで聞いた => プロジェクト名はVoltaと連絡がきた => プロジェクト名とキャラ名は同じでいいか聞いた => 返答なしとのこと
補足
- RxMarblesまとめアプリがツイートで紹介されていたので貼っておきます(こちら)
Macアプリを作って憶えるRxSwift
@yimajo
- RxSwiftでつくった「超実用的」Macアプリ(Github) => https://github.com/yimajo/MeetupTweet
- 「星をつけておくと忘れにくい」
-
rx_notification
=NSNotification
の拡張で、disposeBag
が使えるので、deallocなんかでnotificationのremoveをする処理は書かなくていい -
rx_tap
だけど、IBAction
で書きたいところは書いてもいいのでは - 右から左に流れるツイートは
PublishSubject
- (1つ前の発表で
merge
の使い道がわからないという話があったが)「ツイート」と「アプリからの情報通知」の2つのストリームをmergeしている - 同じElementでないとmergeできないので同じプロトコルに揃える
- レイヤード風アーキテクチャ => 「モデル」という言葉の範囲が大きすぎる
補足
- 各種オペレータのうまい使い道(実践的なもの)まとめみたいなのがあったら面白いと思った
RxSwiftのobserveOnとsubscribeOnを理解する
@ooba
- observeOn/subscribeOn=実行スレッドを決めるもの
- オペレータ = ObserverとObservable両方の働きをする
- subscribeOnはObservable方向の
subscribe
の実行スレッドを決める - observeOnはObserver方向の
on
の実行スレッドを決める - subscribeOnが効かないケースもある
-
NSURLSession
のrx_response
、Hot
なobservable、shareReply()
によってHot化されたobservableなど - 自分がsubscribedOnしようとしていうものの性質を把握しておくことが重要
- 「挙動が理解できなければソースを読め」
補足
-
Hot
とCold
をそもそも理解できていないので、とりあえずドキュメントを読まなくては(こちら)。懇親会で複数人の人に訊いたが、言葉にするのは難しい+人によっていろんな捉え方があるのかなと感じた
Variableについて
@mo_to_44
(現時点で資料未公開)
- Rx勉強会を社内で10回くらい朝に勉強会をした
- Exampleとか基本的なオペレータみたりしたけど、「どういったことを解決できるのか」や「実践的なコード書いたほうが良かった」とのこと
- Variableについてはドキュメントとサンプルコードで勉強
- 日本語翻訳されたRxSwfitのDocumentもあったりする(こちら)
-
someVariable.value = "hoge"
のようにvalue
に値を設定するとイベントが発行される -
Variable
はBehaviorSubject
をラップしたもの -
BehaviorSubject
の特徴としては初期値を渡す必要がある - 初期値の値、または直前の値をEventに流す
- 複数のsubscriberに対して同時に同じ値が流れる
補足
-
Variable
はUnit
と呼ばれるものの1つで、Unit
とはRxCococa
限定のものでありオプション的(便利だよ的な?)な扱い。 -
Subject
にはBehaviorSubject
だけでなくPublishSubject
やReplaySubject
というものもある模様
RxTests
@_ishkawa
- Viewはデザインのリニューアルなんかで変わりやすい、でもViewModelは変わりにくい
- UIのテストは難しい、でもViewModelのテストならいける?
- 仮想時間 =
scheduler.scheduleAt(10) { /** ... */ }
にあたるところ - ライブコーディング!!!
- 「ローディング」の表示のテスト
- 仮想時間には
TestScheduler
を使う - ローディングを生成して、ViewModelのローディングにbindingして、最後にAssertする
- Assertの内容は、仮想時間が「0のとき=まだ何も起きていないとき」は
false
、「10のとき=refresh開始時」はtrue
、「20=レスポンスを返ってきたとき」なのでfalse
みたいな感じでの検証
補足
- 桃の絵を公開してくれたようです
ブログまとめ枠の知見
- 予習はしっかり
- 写真は撮ろう(申し訳ございません)
- ブログまとめ枠っていつまでに公開しなくちゃいけないの?
- ブログまとめ枠専用席というのは少し恥ずかしかった、こういうもの?