create
๐๏ธ Observable.create
โ ์ปค์คํ
์ํ์ค๋ฅผ ์ง์ ์ค๊ณํ๊ธฐ
Observable.create
โ ์ปค์คํ
์ํ์ค๋ฅผ ์ง์ ์ค๊ณํ๊ธฐโObservable์ DIY ํ์!โ ์๋ง์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ก๋ ๋ถ์กฑํ ๋,
create
๋ฅผ ์ฌ์ฉํด ์์์ ๋ฐฉ์์ผ๋ก onNext/onCompleted/onError๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค.
1๏ธโฃ ์๊ทธ๋์ฒ & ๊ธฐ๋ณธ ๊ตฌ์กฐ
Observable<Element>.create { observer -> Disposable in
// 1. ์ด๋ฒคํธ ๋ฐฉ์ถ
observer.onNext(...)
observer.onCompleted() // ๋๋ onError
// 2. ์ ๋ฆฌ(ํด์ ) ๋ก์ง ๋ฐํ
return Disposables.create {
// cancel task, invalidate timer, deallocate resource
}
}
observer:
AnyObserver<Element>
โ.onNext
,.onError
,.onCompleted
ํธ์ถ ๊ฐ๋ฅ.Disposable: ๊ตฌ๋ ์ด dispose ๋ ๋ ํธ์ถ๋ ์ ๋ฆฌ ํด๋ก์ .
2๏ธโฃ ์์ โ Alamofire ์๋ ๊ฐ๋จ HTTP GET
func getRequest(url: URL) -> Observable<Data> {
return Observable.create { observer in
let task = URLSession.shared.dataTask(with: url) { data, _, error in
if let err = error {
observer.onError(err)
} else if let d = data {
observer.onNext(d)
observer.onCompleted()
}
}
task.resume()
return Disposables.create {
task.cancel() // dispose ์ network cancel
}
}
}
๊ตฌ๋ ์์๊ฒ๋ Cold Observable(๋งค ๊ตฌ๋ ๋ง๋ค ์ ์์ฒญ)๋ก ๋์.
3๏ธโฃ ์ฃผ์์ฌํญ ์ฒดํฌ๋ฆฌ์คํธ
โ
observer
์ด๋ฒคํธ ์์
onNext*
โ onCompleted/onError
๋จ 1ํ
โ ์ค๋ ๋
ํธ์ถ ์ค๋ ๋๋ฅผ ๋ช
์ํ๊ฑฐ๋ subscribeOn
ํ์ฉ
โ Dispose ์ฒ๋ฆฌ
๋น๋๊ธฐ ์์ cancel / ํ์ด๋จธ invalidate
โ retain cycle
observer
ํด๋ก์ ๋ด๋ถ [weak self]
ํ์ ์
4๏ธโฃ Single.create
ยท Maybe.create
Single.create
ยท Maybe.create
Single: ์ฑ๊ณต/์คํจ ๋ ์ค ํ๋๋ง ๋ฐฉ์ถ (
SingleEvent.success
,.failure
).Maybe: ์ฑ๊ณต(๊ฐ)/์๋ฃ(๊ฐ ์์)/์คํจ ์ธ ๊ฐ์ง.
Single<String>.create { single in
fetch(id: 1) { result in
switch result {
case .success(let str):
single(.success(str))
case .failure(let err):
single(.failure(err))
}
}
return Disposables.create()
}
5๏ธโฃ Mini Quiz
Observable.create
๋ด๋ถ์์.onNext
๋ฅผ ๋ ๋ฒ ์ฐ์ ํธ์ถ ํ.onCompleted()
์์ด ํจ์๋ฅผ ๋ฐํํ๋ฉด ๋ฌด์จ ์ผ์ด ์ผ์ด๋ ๊น?๋ทฐ์ปจํธ๋กค๋ฌ deinit ์ ์ ๋คํธ์ํฌ ์์ฒญ์ ์ทจ์ํ๋ ค๋ฉด ๋ฐํ Disposable์ ์ด๋ค ์ฝ๋๋ฅผ ๋ฃ์ด์ผ ํ ๊น?
Single.create
์AsyncSubject
๋ฅผ ๋น๊ตํ์ ๋ ์ฐจ์ด์ ์?
๋ค์ โถ๏ธ just, of, from ๋ก ์ด๋ํด ์์ฌ์ด ์ํ์ค ํฉํ ๋ฆฌ ๋ฉ์๋
just
,of
,from
์ ํ์ตํฉ๋๋ค. ๐
Last updated