Posted at

RxSwift勉強会@Sansan まとめ

More than 3 years have passed since last update.

RxSwift勉強会@Sansan に、はじめて「ブログまとめ枠」として参加しましたので、だいぶ遅くなって申し訳ございませんがまとめたもの公開します。

以下すでに先行して他の方がまとめたもの

またRxSwiftの予習が足りず、誤りがある場合はよしなに編集リクエストいただけると嬉しいです :bow:


RxSwiftをプロダクトに導入してみた話


@kazu0620

https://speakerdeck.com/kazu0620/rxswiftwopurodakutonidao-ru-sitemitahua



  • Eightに導入した話

  • 「さわったことある人、挙手」で参加者のうち多くの人が手を挙げていた模様(席の都合上良く見えなかった)

  • 宣言的に記述できる => 「こういうものが流れてきて、こういう処理をする」ということを定義しておくだけ、状態変数はもたない


  • Rx自体は枯れた技術で2009年からある

  • "RxSwift"で検索してたときに情報が見つからなくても、"Reactive Extensions"だったり他の言語で調べると大量に情報が出てきたりする


  • EightではAndroidが先行してRxJavaを使っていて、そこの知見も活かせた

  • RxSwift独自の機能(RxCococaDriverVariable)が便利

  • UIKitのプロパティにbindingできるのはRxCococaによるもの


  • SubscribeOnが勘違いしやすい

  • 設計についてはClean Architectureを参考にした


15 minutes recipe of RxSwift


@gomi_ningen

http://niconare.nicovideo.jp/watch/kn1358

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

http://niconare.nicovideo.jp/watch/kn1364


  • オリジナルの図でRxMarblesを解説

  • 数ある中で一番好きなオペレータはcombineLatest

  • http://rxmarbles.com/


  • RxQuiz(Github)

  • Rxのキャラの名前を作者のTwitterで聞いた => プロジェクト名はVoltaと連絡がきた => プロジェクト名とキャラ名は同じでいいか聞いた => 返答なしとのこと


補足


  • RxMarblesまとめアプリがツイートで紹介されていたので貼っておきます(こちら


Macアプリを作って憶えるRxSwift


@yimajo

https://speakerdeck.com/yimajo/macahuriwozuo-tuteyi-erurxswift


  • 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

https://speakerdeck.com/bricklife/rxswiftfalseobserveontosubscribeonwoli-jie-suru


  • observeOn/subscribeOn=実行スレッドを決めるもの

  • オペレータ = ObserverとObservable両方の働きをする

  • subscribeOnはObservable方向のsubscribeの実行スレッドを決める

  • observeOnはObserver方向のonの実行スレッドを決める

  • subscribeOnが効かないケースもある


  • NSURLSessionrx_responseHotなobservable、shareReply()によってHot化されたobservableなど

  • 自分がsubscribedOnしようとしていうものの性質を把握しておくことが重要

  • 「挙動が理解できなければソースを読め」


補足



  • HotColdをそもそも理解できていないので、とりあえずドキュメントを読まなくては(こちら)。懇親会で複数人の人に訊いたが、言葉にするのは難しい+人によっていろんな捉え方があるのかなと感じた


Variableについて


@mo_to_44

(現時点で資料未公開)


  • Rx勉強会を社内で10回くらい朝に勉強会をした


  • Exampleとか基本的なオペレータみたりしたけど、「どういったことを解決できるのか」や「実践的なコード書いたほうが良かった」とのこと

  • Variableについてはドキュメントとサンプルコードで勉強

  • 日本語翻訳されたRxSwfitのDocumentもあったりする(こちら


  • someVariable.value = "hoge"のようにvalueに値を設定するとイベントが発行される


  • VariableBehaviorSubjectをラップしたもの


  • BehaviorSubjectの特徴としては初期値を渡す必要がある

  • 初期値の値、または直前の値をEventに流す

  • 複数のsubscriberに対して同時に同じ値が流れる


補足



  • VariableUnitと呼ばれるものの1つで、UnitとはRxCococa限定のものでありオプション的(便利だよ的な?)な扱い。


  • SubjectにはBehaviorSubjectだけでなくPublishSubjectReplaySubjectというものもある模様


RxTests


@_ishkawa

https://speakerdeck.com/ishkawa/rxtests


  • Viewはデザインのリニューアルなんかで変わりやすい、でもViewModelは変わりにくい

  • UIのテストは難しい、でもViewModelのテストならいける?

  • 仮想時間 = scheduler.scheduleAt(10) { /** ... */ } にあたるところ

  • ライブコーディング!!!

  • 「ローディング」の表示のテスト

  • 仮想時間にはTestSchedulerを使う

  • ローディングを生成して、ViewModelのローディングにbindingして、最後にAssertする

  • Assertの内容は、仮想時間が「0のとき=まだ何も起きていないとき」はfalse、「10のとき=refresh開始時」はtrue、「20=レスポンスを返ってきたとき」なのでfalse みたいな感じでの検証


補足



  • 桃の絵を公開してくれたようです


ブログまとめ枠の知見


  • 予習はしっかり

  • 写真は撮ろう(申し訳ございません)

  • ブログまとめ枠っていつまでに公開しなくちゃいけないの?

  • ブログまとめ枠専用席というのは少し恥ずかしかった、こういうもの?