[メモ]RxSwiftを理解したい
iOS開発において今やimportされていないプロジェクトはほとんどないかと思われるRxSwiftですが、swiftでのiOS開発を初めて3ヶ月ほど経過し、これを理解していないとiOS開発において人権がないことを理解しました。
なので勉強していきたいと思います。
ちなみに僕のRxSwiftに関する理解は
- インターン先のコードで何度か(何度も)見かけたことはある
- インターン先のiOSエンジニアの方に5-10分程度、簡単に解説をしてもらったことがある
- Rxの思想の元になっている関数型言語の経験はない
なので同じ温度感の人がいればぜひ目を通していただけると嬉しいです。
またRxSwift理解している人で、もしこれを読んでいただけたのであればご指摘等あればじゃんじゃん頂けると嬉しいです。
今回はRxSwiftに関する概念的理解をする投稿とします。実際にサンプルコードとかは余力、モチベがあればPart2として投稿します。
Rx(Reactive Extensions)について
非同期/イベント/時間に関する処理を、LINQ形式で簡潔かつ宣言的に記述することができるC#のさいきょうライブラリ
思想とか概念というよりかはそもそもライブラリらしいです。
Rx内ではこのイベントをObservableというclassとして扱って処理していく形になっているそうです。
RxSwiftについて
登場人物:
-
Observable
- 多分、イベントと同じものとして理解していいものだと思われる。RxSwift内では用いたいclassに対して
Observable<User>
みたいにすることでRxSwiftの記述に対応されたclassを定義することができる。
- 多分、イベントと同じものとして理解していいものだと思われる。RxSwift内では用いたいclassに対して
-
Subscribe
- イベントを順次読み込んでいくことを表しているもの。なので
subcribe(onNext: )
のようなイベントを次に進ませるような形で書いていく。
- イベントを順次読み込んでいくことを表しているもの。なので
-
Subject
- 購読されるもの。
Observable
とObserver
どちらの性質も持ち合わせている。インスタンスをイベント中に好きなタイミングで発火されることができる。
- 購読されるもの。
-
Observer
-
Observable
を監視しているもの。Observableの状態が変化することを認識し、update
として伝達する。
-
-
DisposeBag
-
Observable
でまとまっていた情報を出力する。中の情報が正確に読み取られない(どこかで何かしらの問題が起きている)と出力することはない。
-
あたりは何度も出てくるので何となく理解している必要があります。
メリット
まだ言語化できるほど理解してないです。
強いていうなら
- Observableを用いて処理を行っている間は外部の値を不用意に変更することが発生しにくいのでテストが書きやすい
- MVVMの設計を採用し、fatViewControllerになることを防ぐことができる
デメリット
- 学習コスト・実装コストが不用意に高すぎる
- データバインディングがメモリ効率に悪影響を与える
特徴
時間の概念が存在する
debounce
というオペレータの存在によってインクリメンタルサーチとかのタイミングで時間の経過を利用したロジックを扱うことができます。
MVVMを扱うことができる
メリットの部分でも紹介しましたが、MVVM(Model-View-ViewModel)の設計を用いて開発することができます。RxCocoa
というUIKitをRxSwiftの記述を可能にするライブラリが存在します。
Model
にはビジネスロジックを。ViewModel
にはプレゼンテーションロジックを。View
にはUIを。という分離した考え方で行うことができます。
(ビジネスロジックという言葉は僕は理解しにくいし、抽象的すぎるのではないかと思っています。どちらかというとどうAPIで受け取ったデータに対してアクセスするかみたいなものだと思っています。)
参考資料
RxExampleのコードでRxSwiftのvalidationのコードを紹介しているのが実例あって見てみると良さそうです。
https://github.com/ReactiveX/RxSwift
上のサンプルの存在もこの本を読んでいて知りました。この記事を書く上でも参考になっている部分は多いのでちゃんと学びたい場合は購入を勧めます!僕もインターン先のiOSエンジニアの方に勧めていただきました。
https://swift.booth.pm/items/1076262
Author And Source
この問題について([メモ]RxSwiftを理解したい), 我々は、より多くの情報をここで見つけました https://qiita.com/ostk0069/items/117f2563aa58f53fdb51著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .