[RxSwift] Observable.create์ ๋์์๋ฆฌ ์ดํดํ๊ธฐ
Observable.create
Observable์ ์ฌ์ฉํ๋ฉด์ ์ง์ง ๋ง์ด ์ฐ๋ create ๋ฉ์๋๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ์์๋ณด๋ ค๊ณ ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก create์ ํด๋ก์ ๋ฅผ ์ ๋ฌํ๊ณ Observable์ ๋ฐํ๋ฐ์ต๋๋ค.
let observable = Observable<Int>.create { observer in
observer.onNext(1)
observer.onCompleted()
return Disposables.create()
}
observable.subscribe(...)
์ด๋ฐ์์ผ๋ก ์ฌ์ฉํ์์ฃ . ๊ทธ๋ผ ์ด๋ค ๊ณผ์ ์ผ๋ก Observable์ด ์์ฑ๋๋์ง ์์๋ด ์๋ค!
๊ฐ์ธ์ ์ผ๋ก RxSwift๋ฅผ ๊ฐ๋ตํ๊ฒ ์ฝ๋๋ก ์ฎ๊ธด ์ ์ฅ์๋ฅผ ๋ง๋ค์๋๋ฐ์, ๋ด๋ถ์ ์ผ๋ก ์์์ ์ฐ์ฐ์ด๋ ํ์ฅ์ฑ์ ๋ํ ์ง์์ด ๋ถ์กฑํ์ง๋ง ํต์ฌ์ ์ธ ๋ก์ง์ ์ดํดํ๊ณ ์ ํ์ต๋๋ค. ์ด ํฌ์คํธ์์๋ ์ด ๋ ํฌ์ ์๋ ์ฝ๋๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉด์ ํ์ธํด๋ณด๋ ค๊ณ ํด์.
์ค์ ์ ์ฅ์์ธ RxSwift ์ ์ฝ๋์ ํต์ฌ ๋ก์ง์ ์์ ํ ๋๊ฐ๊ธฐ ๋๋ฌธ์ ๋น๊ตํ๋ฉด์ ๋ด๋ ๊ด์ฐฎ์๊ฑฐ์์! ๊ทธ๋ผ ์์ํ๊ฒ ์ต๋๋ค!
์์ ์ฝ๋๋ฅผ ๋ฐ๋ผ๊ฐ์
let observable = Observable<Int>.create { observer in
observer.onNext(1)
observer.onCompleted()
return Disposables.create()
}
observable.subscribe(...)
์ด ์ฝ๋๋ฅผ ์คํํ๋ฉด ์์๋๋ก ์ด๋ค ์ผ๋ค์ด ์ผ์ด๋๋์ง ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ create ๋ฉ์๋๋ฅผ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
create๋ Observable์ด ์๋๋ผ ObservableType์ ํ์ ๋ฉ์๋๋ก ์ ์๋์ด ์์ต๋๋ค.
Observable์ ์ด์ด๋ณด๋ฉด ObservableType ํ๋กํ ์ฝ์ ์ฑํํ๊ณ ์์ด์. ์ฐ๋ฆฌ๊ฐ create๋ก ๋ถ๋ ๋ ๋ฉ์๋๋ Observable์ ๋ฉ์๋๊ฐ ์๋๋ผ ObservableType์ ํ์ ๋ฉ์๋์๋ ๊ฒ์ด์ฃ .
๋ค์ ์ด ์ฝ๋๋ฅผ ๋ณผ๊ฒ์! create๋ subscribe๋ผ๋ ์ด๋ฆ์ escaping closure๋ฅผ ๋ฐ๊ณ ์์ด์. ์ด ํด๋ก์ ๋ AnyObserver๋ฅผ ์ธ์๋ก ๋ฐ๊ณ Disposable์ ๋ฐํํ๋ ํด๋ก์ ์ ๋๋ค.
create๋ฅผ ํ ๋ ์ ๋ฌํ๋ ํด๋ก์ ๋ฅผ ๋ค์ ๋ณผ๊น์?
{ observer in
observer.onNext(1)
observer.onCompleted()
return Disposables.create()
}
์ด ํด๋ก์ ์ธ๋ฐ, observer๋ผ๋ ์ ๋ ฅ์ ๋ฐ์์ observer์ onNext ๋ฉ์๋์ onCompleted ๋ฉ์๋๋ฅผ ์คํํ๊ณ , ๋ง์ง๋ง์๋ Disposables.create() ๋ฅผ ํตํด์ Disposable์ ๋ฐํํ๋ ํด๋ก์ ์ ๋๋ค.
create ๋ฉ์๋์์๋ ์ด ํด๋ก์ ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ์ง ์๊ณ AnonymousObservable์ ์์ฑ์์ ํด๋ก์ ๋ฅผ ๊ทธ๋๋ก ๋๊ฒจ์ฃผ๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ AnonymousObservable์ด create์ ๊ฒฐ๊ณผ๋ก ๋ฐํ๋๊ณ ์์ต๋๋ค.
AnonymousObservable์ด ์ด๋ค ํด๋์ค์ธ์ง ํ์ธ์ ํด๋ด์ผ๊ฒ ๋ค์. AnonymousObservable๋ฅผ ์ด์ด๋ด ์๋ค!
AnonymousObservable์์๋ ์์ฑ์๋ ์๊ณ , run์ด๋ผ๋ ๋ฉ์๋๋ ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์์ง run์ ํธ์ถํ๋ ์ฝ๋๋ ๋ง๋์ง ๋ชปํ์ผ๋๊น ํ๋ฆ ๊ทธ๋๋ก ์์ฑ์๋ง ํ์ธํด๋ณผ๊ฒ์.
์์ฑ์๋ SubscribeHandler ํ์ ์ ์ธ์๋ก ๋ฐ์์ subscribeHandler ํ๋กํผํฐ์ ํ ๋นํด์ฃผ๊ณ ๋ฐํ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ SubscribeHandler๋ ์๊น ๋ณด์๋ create์ ํ๋ผ๋ฏธํฐ ํ์ ๊ณผ ๋์ผํ (AnyObserver) -> Disposable ์ ๋๋ค.
๊ทธ๋ผ ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๊ฐ ์ ๋ฌํ ํด๋ก์ ๊ฐ AnonymousObservable์ subscribeHandler์ ์ ์ฅ๋๊ณ , ์ด AnonymousObservable์ ์ธ์คํด์ค๊ฐ create ๋ฉ์๋์ ๊ฒฐ๊ณผ๋ก ๋ฐํ๋๋ค๊ณ ํ ์ ์์ต๋๋ค.
์ ๋ฆฌ
create๋ ๋๋ฌ์ต๋๋คใ ใ create๋ ์ฌ์ค ๋จ์ํ๊ณ , subscribe๋ฅผ ๋ด์ผ ์ด๋ ๊ฒ ๋ง๋ AnonymousObservable์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์ ์ ์์ ๊ฒ ๊ฐ์์. ์ผ๋จ ์ง๊ธ๊น์ง ๋ณธ ๋ด์ฉ์ ์ ๋ฆฌํด๋ด ์๋ค!
1) ๋จผ์ create ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด์ ํด๋ก์ ๋ฅผ ์ ๋ฌํฉ๋๋ค.
2) create ๋ฉ์๋๋ ObservableType์ ์ ์๋์ด ์๊ณ , ๊ตฌํ์ AnonymousObservable ์ธ์คํด์ค๋ฅผ ์์ฑํด ๋ฐํํ๋๋ก ์์ฑ๋์ด์์ต๋๋ค.
3) AnonymousObservable์ ์์ฑํ ๋๋ create๋ฅผ ํธ์ถํ๋ฉฐ ์ ๋ฌํ ํด๋ก์ ๊ฐ subscribeHandler์ ์ ์ฅ์ด ๋ฉ๋๋ค.
๊ฐ๋จํ์ฃ ?
๋ค์ ํฌ์คํธ์์๋ subscribe์ ๋์์๋ฆฌ๋ฅผ ๋ณด๋ ค๊ณ ํด์. ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
'๐ ์์ด-์ค-์์ค > โก๏ธ RxSwift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[RxSwift] subscribe์ ๋์์๋ฆฌ ์ดํดํ๊ธฐ (3) | 2022.01.24 |
---|---|
[RxSwift] Disposables.create() ์ ํ์ง? (0) | 2022.01.16 |
[RxSwift] ์์์ ํ๋ฆ๋๋ก Observable ํํค์ณ๋ณด๊ธฐ (0) | 2022.01.08 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote