0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RxSwiftを学ぶ①SubjectとObservableの違い

Last updated at Posted at 2023-05-31

はじめに

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学習中に詰まった点を書いて行きたいと思います。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?