3~5์ ๊ฒฝ์ฐ๋ #1 ์ฝ๋์์ ๊ฐ๋ ์ ๋๋ด๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์, https://github.com/iamchiwon/RxSwift_In_4_Hours/blob/master/README.md ์ ์๋ ๋ชฉ์ฐจ๋ง ๋จ๊ฒจ๋๋ค.
-> dispose๋ก ์์ ์ฃผ์.
๋ฐฉ๋ฒ1. disposable ๋ณ์ ์ฌ์ฉ
var disposable: Disposable?
์ผ๋ก ์ฐ๊ณ ์ฌ๊ธฐ์ disposable ์ ์ ์ฅํ๋ค๊ฐ, disposable.dispose()
๋ฐฉ๋ฒ2. dispose ํ ๊ฒ์ด ์ฌ๋ฌ๊ฐ์ผ ๋๋, var disposables: [Disposable] = []
๋ก ๋ฃ์๋ค๊ฐ ๋ฐฐ์ด ์ ์ฒด ์์์ ๊ฐ๊ฐ dispose()
๋ฐฉ๋ฒ3. disposeBag ์ด์ฉ
var disposeBag = DisposeBag()
@IBAction func onLoad() {
editView.text = ""
setVisibleWithAnimation(self.activityIndicator, true)
// let d =
downloadJson(MEMBER_LIST_URL)
.subscribe(onNext: { json in
DispatchQueue.main.async {
self.editView.text = json
self.setVisibleWithAnimation(self.activityIndicator, false)
}
})
.disposed(by: disposeBag)
// disposables.append(d) // 2
// ์ด๊ฒ๋ง์ ๊ท์ฐฎ๋ค? 3. disposed ๋ฅผ ์ฌ์ฉ. disposabled์ ๋ณ์๋ก ๋ฐ์ง ์์๋ ๋ฃ์ ์ ์๋ค.
// d.dispose() // 1. ์ทจ์ํ๊ณ ์ถ์ ๋์์ด ์์ ๋ disposable์ ํธ์ถํด์ ์ทจ์์ํฌ ์ ์๋ค.
}
override func viewWill Disappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// disposables.forEach($0.dispose()) // 2
}
observeOn
, subscribeOn
share
merge
: ์ฌ๋ฌ๊ฐ์ observable์ ํ๋๋ก ํฉ์ณ์ค๋ค. ์์ observable๊ณผ type์ด ๊ฐ์์ผ ํ๋ค.zip
: ์์ observable๊ณผ ์๋ observable์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ฐ ์์ ๋ง๋ค์ด์ ๋ด๋ ค์ค๋ค. ๊ทผ๋ฐ, ์ง์ด ์๋ง์์ ๋จ๋ ์ ๊ฐ ์์ผ๋ฉด ๋ด๋ ค์ค์ง ์๋๋ค.combine
combineLatest
: zip ์ ์์ ๋ง๋ค๊ฒ ์์ผ๋ฉด ๋ชป ๋ด๋ ค๊ฐ๋ ๋ฐ๋ฉด, combineLatest๋ ์๋ observable์ ๊ฐ์ฅ ๋ง์ง๋ง ๊ฒ๊ณผ ์์ ์ง์ด์ ๋ด๋ ค์จ๋ค.์ถ์ฒ
์ ํ๋ธ ๊ณฐํ๊น๋ RxSwift 4์๊ฐ์ ๋๋ด๊ธฐ
https://youtu.be/iHKBNYMWd5I
RxSwift 4์๊ฐ์ ๋๋ด๊ธฐ github
https://github.com/iamchiwon/RxSwift_In_4_Hours