はじめに
swift学習中の初学者です。
RxSwiftを学ぶ中で、詰まった点や理解できなかった点について、備忘録と理解の整理のために記事にしていきたいと思います。
この記事を読むにあたって
詳しいRxSwiftについての説明等はここでは行いません。
あくまで私が学習していてうまく理解ができなかった部分のみ記事にしています。
初学者のため、誤っている点等あれば教えていただけたら嬉しいです。
SubjectとObservableの違い
Subjectは観察する側にも観察される側にもなれる
この意味が全然理解できませんでした。
Observableもsubscribe(購読)できるのになぜObservableは観察者となれないのか。
これを理解するために、まずSubjectとObservableの違いについて書きたいと思います。
Subjectにできてobservableにできないこととして、「通知を受け取る」ということ
・Subject
let subject = PublishSubject<Int>()
subject.onNext(1) // エラーにならない
・Observable
let observable = Observable.from([1, 2, 3])
observable.onNext(4) // エラーになる
通知を受け取れないということは、observableは観察者となることができない。
subjectは通知を受け取ることができて、かつ自身も通知を発行することができるため、
これが「subjectは観察する側にも観察される側にもなれる」という意味と理解できました。
ちなみに、サンプルコードなどでよくある
Observable.of("A", "B", "C", "D")
.subscribe(onNext: { element in
print(element)
})
.disposed(by: disposeBag)
というコードを見て、私はこのObservableは通知受け取ってるんじゃないか、
観察者になってるやんと思ったのですが、
あくまでこのObservableが発行した通知をクロージャに渡しているだけなので、Observable自身は観察者ではないという理解で落ち着きました。
Observableの必要性
ということはSubject使った方がいいじゃん、Observable使う必要あるのかなと思い調べたところ、
Observableは後から変更できないため「読み取り専用」として機能するということでした。
データの安全性と一貫性を保証することができるため、変更の必要がないところでの予期せぬ変更等を防ぐことができます。
必要に応じてSubjectとObservableを使い分けた方がいいと理解しました。
最後に
最後まで読んでいただきありがとうございます!
今後もRxSwift学習中に詰まった点を書いて行きたいと思います。