AsyncSubject
โณ AsyncSubject โ ์๋ฃ ์์ ์ โ๋ง์ง๋ง ๊ฐโ๋ง ๋ฐฉ์ถ
ํต์ฌ ํค์๋: Single Emission at Completion ยท Hot Subject ยท Single-result Tasks
AsyncSubject<Element>
๋ ์คํธ๋ฆผ์ด ์๋ฃ๋ ๋ ๋จ ํ ๋ฒ, ๋ง์ง๋ง onNext
๊ฐ๋ง ์ ํํฉ๋๋ค. ์๋ฃ ์ ์ ๊ตฌ๋
ํด๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ง ๋ชปํ๋ค๊ฐ, .onCompleted()
ํธ์ถ ์๊ฐ ์ต์ ๊ฐ 1๊ฐ๋ฅผ ์ ๋ฌํ๊ณ ์คํธ๋ฆผ์ ์ข
๋ฃํฉ๋๋ค.
1๏ธโฃ ํน์ง ์์ฝ
์ด๊ธฐ๊ฐ
โ ์์
์บ์ ํฌ๊ธฐ
1 (๋ง์ง๋ง ๊ฐ, ์๋ฃ ์)
๊ตฌ๋ ์ ์ ๋ฌ
์๋ฃ ์ โ ์์ / ์๋ฃ ํ โ ๋ง์ง๋ง ๊ฐ๊ณผ .completed
์คํธ๋ฆผ ์ข ๋ฃ
.onCompleted()
ํ์ (์๋ฌ ์ .error
๋ง ์ ํ)
2๏ธโฃ ๊ธฐ๋ณธ ์ฌ์ฉ ์์
let subject = AsyncSubject<String>()
let bag = DisposeBag()
subject.onNext("Step 1")
subject.onNext("Step 2")
subject.subscribe(onNext: { print("Subscriber:",$0) },
onCompleted: { print("Completed!") })
.disposed(by: bag)
subject.onNext("Final Step")
subject.onCompleted()
์ถ๋ ฅ
Subscriber: Final Step
Completed!
โFinal Stepโ๋ง ๋ฐฉ์ถ๋จ (๋ง์ง๋ง onNext).
onCompleted()
๊ฐ ์์ผ๋ฉด ์์ํ ๋ฌด์๋ต์ด๋ฏ๋ก ๋ฐ๋์ ํธ์ถ.
3๏ธโฃ ์ค์ ํจํด โ ํ์ผ ์
๋ก๋ ๊ฒฐ๊ณผ ์ ๋ฌ
func uploadFile(_ data: Data) -> Observable<UploadResponse> {
let subject = AsyncSubject<UploadResponse>()
api.upload(data: data) { result in
switch result {
case .success(let response):
subject.onNext(response) // ๋ง์ง๋ง ๊ฒฐ๊ณผ
subject.onCompleted()
case .failure(let error):
subject.onError(error)
}
}
return subject.asObservable() // ํธ์ถ ์ธก: ๊ฒฐ๊ณผ 1๊ฐ๋ง ์์
}
์ฌ๋ฌ ์ค๊ฐ ์งํ๋ฅ ์ด ํ์ํ๋ฉด
PublishSubject
๋ก ๋ฐ๋ก ๋ธ๋ก๋์บ์คํธ.
4๏ธโฃ Subject ๋น๊ต ํ
์ด๋ธ
PublishSubject
onNext ์ฆ์
N
๋ฒํผ ํญ
BehaviorSubject
onNext ์ฆ์ + ์บ์ 1
N
์ํ ์ ์ฅ
ReplaySubject
onNext ์ฆ์ + ์บ์ N
N
์ฑํ ํ์คํ ๋ฆฌ
AsyncSubject
onCompleted ์
1
๋น๋๊ธฐ ์์ ์ต์ข ๊ฒฐ๊ณผ
5๏ธโฃ ์๋ฌ ์ฒ๋ฆฌ & Empty ์๋๋ฆฌ์ค
.onError(e)
ํธ์ถ ์ ๊ฐ ์์ด ์๋ฌ๋ง ์ ๋ฌ.์๋ฃ ์ ์
onNext
๊ฐ ํ ๋ฒ๋ ์์๋ค๋ฉด ๊ตฌ๋ ์๋ completed๋ง ์์ (๊ฐ=nil).
subject.onCompleted() // next ์์๋ค๋ฉด completed ์ด๋ฒคํธ๋ง ์ ๋ฌ
6๏ธโฃ Mini Quiz
AsyncSubject
์ ๊ฐ์ 3๊ฐ ๋ณด๋ด๊ณ.onCompleted()
๋ฅผ ์๋ตํ๋ฉด ๊ตฌ๋ ์๋ ๋ฌด์์ ๋ฐ๋๊ฐ?RxSwift์
Single<Element>
์AsyncSubject
๊ธฐ๋ฅ ์ฐจ์ด ํ ์ค ์์ฝ.Combine ํ๋ ์์ํฌ์์ ์ ์ฌํ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ค๋ฉด ์ด๋ค Combine ๊ฐ์ฒด๋ ์คํผ๋ ์ดํฐ ์กฐํฉ์ ์ฌ์ฉํ๋ฉด ๋ ๊น?
๋ค์ โถ๏ธ schedulers.md ๋ก ์ด๋ํด ์ค๋ ๋ยท์คํ ์ปจํ ์คํธ ์ ์ด๋ฅผ ํ์ตํฉ๋๋ค. ๐
Last updated