LoginSignup
4
4

More than 3 years have passed since last update.

【Swift】RxSwiftが難しいのでサンプルコードを作った

Last updated at Posted at 2021-01-25

RxSwiftが難しい

「RxSwiftについていろんな記事を読みまくったけど、結局わからん」
その気持ちめっちゃわかります。
難しいですよね〜特に独学だとめちゃめちゃ辛い。
とりあえずRxSwiftはデータバインディングができて、
それを利用してMVVMなんかに使われることが多いです。

RxCocoaと併用しよう

RxSwiftはRxCocoaとよく併用されます。

ViewModel

スクリーンショット 2021-01-25 16.45.27.png

ModelTypeでInputとOutputのプロトコルを返すことで、
viewModel.outputs.output、
viewModel.inputs.input
のようにそれがoutputsに登録したものなのか
inputsに登録したものなのかが明確になる。
extensionで準拠させよう。

inputsはViewControllerから受け取るイベントで、
受け取りなのでObserverを使う。

outputsはinputsでViewControllerから受け取ったイベントによって
処理をして、その結果をViewControllerに返すのでObservableを使う。

Observerは受信者(監視)、Observableは発信者であるので
それぞれoutputsとinputsで使い分けている。

output

let _output = BehaviorRelay<Bool>(value: false)
self.output = _output.asObservable()
//Observableを代入し変数outputを初期化している。

input

self.input = AnyObserver<Bool>() { bool in
//Observerなので、ViewControllerからinputに流れてきた
//イベントをここで受け取る。 boolはそのイベント。
    _output.accept(bool)
    //Observable(発信者)にイベントを発信させるには
    //accept()を使う。
}

こんな感じで、ViewModelはVCからイベントをinputで受け取り、
outputで処理結果を返す感じに使う。
VCではinputでViewModelにイベントを送り、
outputを監視して処理結果に応じたUIの更新を行う。

ViewController

スクリーンショット 2021-01-25 16.32.26.png
Instantiateを使うとbundleNameとか使わなくても、
storyboardを呼び出せる。(別々のstoryboardを使っていてもこれで一発なので超便利)
dependencyやinjectは依存性的な感じ。ここは自分で調べてください。

var viewModel: RxSwiftViewModelType!
//viewModelをModelTypeで型宣言してあげることで、
//inputs, outputs変数(プロトコル)を通さなければならなくなり、
//イベントがinputsなのかoutputsなのかはっきりする。(重要)

input

let _ = viewModel.inputs.input.onNext(true)
//ViewModelにイベントを送りたいときは、onNextメソッドを使う。
//画面更新が入る時など

output

let _ = viewModel.outputs.output
    .subscribe(onNext: { [weak self] bool in
    //viewModelからのイベント結果を監視し、イベントがきたら発火する
    //weak selfはメモリリーク対策
        guard let self = self else {return}
        //guard let もメモリリーク対策
        //イベント結果がきた時にしたい処理を書く
     }).disposed(by: disposedBag)
//disposedBagを入れることで、購読の重複を防ぐ。
//(詳しくは調べてください)

遷移

スクリーンショット 2021-01-25 16.33.17.png

instantiateライブラリを使っているので、遷移の仕方は少し特殊
この場合はnavigationControllerを使ったパターン。

まとめ

RxSwift、難しいですよね。
さらっとやったらあとは実務でゆっくり身に付けるのが一番効率が良さそうです。

ちなみに、RxSwiftの参考書なら RxSwift研究読本がおすすめです。

4
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4