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 3 years have passed since last update.

【RxSwift】Subject について

Last updated at Posted at 2021-10-31

概要

Subjecteventsubscribersに伝達する

新聞に例えると、、、
新聞(Subject)は世の中の情報等(event)を人々(subscribers)に伝達するといったイメージです。

Subjectとはイベントの検知だけではなく、イベントの発生をさせることができます。つまり、ObservableTypeであり、ObserverTypeでもあるということです。

種類

RxSwiftで使用される代表的なものとして以下が挙げられます。

・Publish Subject
・Behavior Subject
・Relay Subject

Publish Subject

初期値は持たずバッファーもなし。subscribeした時から出力される

let publishSubject = PublishSubject<String>()

publishSubject.onNext("issue 1")

publishSubject.subscribe { event in
    print(event)
}

publishSubject.onNext("issue 2")
publishSubject.onNext("issue 3")

// 出力
next(issue 2)
next(issue 3)

Behavior Subject

publish Subjectとは異なり、初期値とバッファーを持つ。
subscribeした時点から一つ過去のeventから流している。

let behaviorSubject = BehaviorSubject(value: "issue 1")

behaviorSubject.onNext("issue 2")
behaviorSubject.onNext("issue 3")

behaviorSubject.subscribe { event in
    print(event)
}

behaviorSubject.onNext("issue 4")

// 出力
next(issue 3)
next(issue 4)

Relay Subject

Behavior Subjectのバッファーが指定できるようになったバージョン。ただし初期値はなし。

let replaySubject = ReplaySubject<String>.create(bufferSize: 2)

replaySubject.onNext("issue 1")
replaySubject.onNext("issue 2")
replaySubject.onNext("issue 3")

replaySubject.subscribe { event in
    print("event1",event)
}
replaySubject.onNext("issue 4")
replaySubject.onNext("issue 5")

print("Subscription2")

replaySubject.subscribe { event in
    print("event2",event)
}
replaySubject.onNext("issue 6")
replaySubject.onNext("issue 7")

// 出力
event1 next(issue 2)
event1 next(issue 3)
event1 next(issue 4)
event1 next(issue 5)
Subscription2
event2 next(issue 4)
event2 next(issue 5)
event1 next(issue 6)
event2 next(issue 6)
event1 next(issue 7)
event2 next(issue 7)

終わりに

以上です!

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?