์๋ ํ์ธ์ Foma ์ ๋๋ค!
์ค๋๋ง์ RxSwift ๊ธ์ ํฌ์คํ ์ ํ๋๋ฐ.. ์จ์ผ์ง ์จ์ผ์ง ๋ฏธ๋ฃจ๋ค๊ฐ ์ฐ๊ฒ ๋ฉ๋๋ค...
์ค๋์ ์ฌ๋ฌ๊ฐ์ ์ด๋ฒคํธ๋ค์ ํฉ์ณ์ฃผ๋ ์ฐ์ฐ์๋ค์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!
๋ฐ๋ก ์์ํ ๊ฒ์~
1.CombineLatest
์ฌ๋ฌ๊ฐ์ ์ต์ ๋ฒ๋ธ์ ๊ฐ์ฅ ๋ง์ง๋ง์ ๊ฐ์ ํฉ์ณ์ ํ๋์ ๊ฒฐ๊ณผ๋ก ๋ฐฉ์ถํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ๊ฐ๊ฐ ์๊น,๋ชจ์,์ซ์๋ฅผ ๋ฐฉ์ถํ๋ ์๋ธ์ ํธ๊ฐ ์์ต๋๋ค.
let ์๊น = PublishSubject<String>()
let ๋ชจ์ = PublishSubject<String>()
let ์ซ์ = PublishSubject<Int>()
์ปด๋ฐ์ธ๋ ์ดํฐ์คํธ๋ก ๊ฐ ์ต์ ๋ฒ๋ธ์ ๋ฌถ์ ๋ค ๊ตฌ๋ ์ ํ์ฌ ๋ฐฉ์ถํ๋ ๊ฐ์ ์ถ๋ ฅํด๋ด ๋๋ค.
let combineLatest = Observable.combineLatest(์๊น,๋ชจ์,์ซ์) {์๊น,๋ชจ์,์ซ์ in "\(์๊น),\(๋ชจ์),\(์ซ์)"}
combineLatest.subscribe({print($0)})
๋ง์ฝ ์ด๋ ๊ฒ ๊ฒ์ ์์ธ ์๊น์ ๋ฐฉ์ถํ๋ฉด ์ด๋ค ๊ฐ์ด ์ถ๋ ฅ๋ ๊น์?
์ ๋ต์ ์๋ฌด๊ฒ๋ ๋ฐฉ์ถ๋์ง ์์ต๋๋ค.
3๊ฐ์ ์ต์ ๋ฒ๋ธ์ ๊ฐ์ฅ ๋ง์ง๋ง ๊ฐ์ ๋ฌถ์ด์ ๋ง๋๋ ๊ฐ์ด๋ฏ๋ก ์ต์ ๊ฐ๊ฐ์ ์ต์ ๋ฒ๋ธ๋ณ๋ก ํ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถํด์ผํฉ๋๋ค.
์๊น.onNext("๊ฒ์ ์")
์์ ์๊น๊ณผ ๋ชจ์ ์ซ์ ์ด๋ ๊ฒ 3๊ฐ์ ์ต์ ๋ฒ๋ธ์ด ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถํ๋ฉด ๊ฒ์ ์,๋๊ทธ๋ผ๋ฏธ,1์ด ํ๋๋ก ํฉ์ณ์ ธ์ ๋ฐฉ์ถ๋๊ฒ ๋ฉ๋๋ค.
๋ชจ์.onNext("๋๊ทธ๋ผ๋ฏธ")
์ซ์.onNext(1)
//next(๊ฒ์ ์,๋๊ทธ๋ผ๋ฏธ,1)
์ฌ๊ธฐ์ ์๊น์ด ํ๋์์ผ๋ก ๋ฐฉ์ถ๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
๊ฐ์ฅ ๋ง์ง๋ง์ ๋ฐฉ์ถ๋ ๋ชจ์๊ณผ ์ซ์๊ฐ ํฉ์ณ์ ธ ํ๋์ ๋๊ทธ๋ผ๋ฏธ 1๋ก ๋ฐฉ์ถ๋๊ฒ ๋ฉ๋๋ค.
์๊น.onNext("ํ๋์")
//next(ํ๋์,๋๊ทธ๋ผ๋ฏธ,1)
2.Zip
์ฌ๋ฌ๊ฐ์ ์ต์ ๋ฒ๋ธ์ ๊ฐ์ ํฉ์ณ์ ํ๋์ ๊ฒฐ๊ณผ๋ก ๋ฐฉ์ถํฉ๋๋ค.
์๊น์ ๊ฐ์ด ์๊น๊ณผ ๋ชจ์๊ณผ ์ซ์๊ฐ ์์ต๋๋ค.
let ์๊น = PublishSubject<String>()
let ๋ชจ์ = PublishSubject<String>()
let ์ซ์ = PublishSubject<Int>()
let zip = Observable.zip(์๊น,๋ชจ์,์ซ์) {์๊น,๋ชจ์,์ซ์ in "\(์๊น),\(๋ชจ์),\(์ซ์)"}
zip.subscribe({print($0)})
์ปด๋ฐ์ธ ๋ ์ดํฐ์คํธ์ ๊ฐ์ด ๊ฐ ์ต์ ๋ฒ๋ธ์ด ์ต์ ํ๋๋ผ๋ ๋ฐฉ์ถ๋์ผ ์ถ๋ ฅ์ด ๋ฉ๋๋ค.
์๋์ ๊ฐ์ด ์๊น๋ง ๋ฐฉ์ถ๋์๋ ์๋ฌด๊ฒ๋ ์ถ๋ ฅ๋์ง ์์ต๋๋ค.
์๊น.onNext("๊ฒ์ ์")
์ด๋ ๊ฒ ๋ชจ์๊ณผ ์ซ์๊น์ง ๋ฐฉ์ถํด์ฃผ๋ฉด ๊ฒ์ ์,๋๊ทธ๋ผ๋ฏธ,1์ด ๋ฐฉ์ถ๋๊ฒ ๋ฉ๋๋ค.
๋ชจ์.onNext("๋๊ทธ๋ผ๋ฏธ")
์ซ์.onNext(1)
//next(๊ฒ์ ์,๋๊ทธ๋ผ๋ฏธ,1)
๊ทธ๋ฌ๋ฉด CombineLatest์ ๋ค๋ฅธ ์ ์ ๋ฌด์์ผ๊น์?
์๊น์ ํ๋์์ผ๋ก ๋ฐฉ์ถํ๊ฒ ๋๋ฉด ์๋ฌด๋ฐ ๊ฒ๋ ์ถ๋ ฅ๋์ง ์์ต๋๋ค.
์๊น.onNext("ํ๋์")
์ฆ, ์๋กญ๊ฒ ๋ฐฉ์ถ๋ ๊ฐ ๋ฐ์ดํฐ๋ค์ ํฉ์ณ์ ํ๋์ ๋ฐ์ดํฐ๋ก ๋ฐฉ์ถํ๋ ๊ฒ์ ๋๋ค.
์๊น.onNext("๊ฒ์ ์")
๋ชจ์.onNext("๋๊ทธ๋ผ๋ฏธ")
์ซ์.onNext(1)
์๊น.onNext("ํ๋์")
๋ชจ์.onNext("๋ค๋ชจ")
์ซ์.onNext(2)
//next(๊ฒ์ ์,๋๊ทธ๋ผ๋ฏธ,1)
//next(ํ๋์,๋ค๋ชจ,2)
3.Merge
์ฌ๋ฌ๊ฐ์ ์ต์ ๋ฒ๋ธ์ ํฉ์ณ ๊ฐ๊ฐ ๋ฐฉ์ถ๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ฐฉ์ถํฉ๋๋ค.
์์ ๊ฐ์ด ์๊น,๋ชจ์,์ซ์๊ฐ ์์ต๋๋ค.
ํ์ง๋ง ๋ค๋ฅธ ์ ์ ์ซ์๊ฐ String์ด์ฃ ?
merge๋ ๋ฐฉ์ถ๋๋ ๋ฐ์ดํฐ ํ์ด ๋ชจ๋ ๋๊ฐ์์ผ ํฉ๋๋ค.
let ์๊น = PublishSubject<String>()
let ๋ชจ์ = PublishSubject<String>()
let ์ซ์ = PublishSubject<String>()
๊ตฌ๋ ํ ๋ค ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด ๋ฌถ์ด์ค ์ต์ ๋ฒ๋ธ์์ ๋ฐฉ์ถ๋ ๋ฐ์ดํฐ ๋ชจ๋๋ฅผ ๋ฐฉ์ถํฉ๋๋ค.
let merge = Observable.merge(์๊น,๋ชจ์,์ซ์)
merge.subscribe{print($0)}
์๊น.onNext("๊ฒ์ ์")
๋ชจ์.onNext("๋๊ทธ๋ผ๋ฏธ")
์ซ์.onNext("1")
์๊น.onNext("ํ๋์")
//next(๊ฒ์ ์)
//next(๋๊ทธ๋ผ๋ฏธ)
//next(1)
//next(ํ๋์)
4.Concat
์ฌ๋ฌ๊ฐ์ ์ต์ ๋ฒ๋ธ์ด ๋ฐฉ์ถํ ๋ฐ์ดํฐ๋ฅผ ์ฐจ๋ก๋ก ๋ฐฉ์ถํฉ๋๋ค.
์ปจ์บฃ๋ ๋ฉ์ง์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋ ํ์ด ๊ฐ์์ผ ํฉ๋๋ค.
์๊น,๋ชจ์,์ซ์๋ฅผ ์ฐจ๋ก๋ก ๋ฌถ์๋ค๋ฉด ์๊น์ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ๋ฐฉ์ถ๋ ํ ์ฆ, ์ปดํ๋ฆฟ์ด ๋ฐฉ์ถ๋ ์ดํ์ ๋ฐฉ์ถ๋ ๋ชจ์์ ๋ฐ์ดํฐ๊ฐ ๋ฐฉ์ถ๋๊ณ
๋ชจ์์ ๋ฐ์ดํฐ๊ฐ ์ปดํ๋ฆฟ์ด ๋๊ณ ์ซ์์ ๋ฐ์ดํฐ๊ฐ ๋ฐฉ์ถ๋ฉ๋๋ค.
์ปดํ๋ฆฟ์ด ๋๊ธฐ ์ ์ ๋ฐฉ์ถ๋ ๊ทธ ์ ์ ์ต์ ๋ฒ๋ธ ๋ฐ์ดํฐ๋ ๋ฐฉ์ถ๋์ง ์์ต๋๋ค.
let ์๊น = PublishSubject<String>()
let ๋ชจ์ = PublishSubject<String>()
let ์ซ์ = PublishSubject<String>()
let concat = Observable.concat(์๊น,๋ชจ์,์ซ์)
concat.subscribe{print($0)}
์๊น.onNext("๊ฒ์ ์")
์๊น.onNext("ํ๋์")
๋ชจ์.onNext("๋ค๋ชจ")
์๊น.onCompleted()
๋ชจ์.onNext("๋๊ทธ๋ผ๋ฏธ")
๋ชจ์.onCompleted()
์ซ์.onNext("1")
//next(๊ฒ์ ์)
//next(ํ๋์)
//next(๋๊ทธ๋ผ๋ฏธ)
//next(1)
5.withLatestFrom
๊ฐ์ฅ ๋ง์ง๋ง์ ๋ฐฉ์ถํ ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถํฉ๋๋ค.
์๋์ ๊ฐ์ด ๋ง์ฝ ๋ฒํผ๊ณผ ํ ์คํธํ๋๊ฐ ์๊ณ ๋ฒํผ์ ๋๋ ์๋ ํ ์คํธํ๋์ ๊ฐ์ ๋ฐฉ์ถํ๋ค๊ณ ๊ฐ์ ํ ๋
์ฐ๋ฆฌ๋ ํ ์คํธํ๋์ ๋งจ ๋ง์ง๋ง ๋ฐ์ดํฐ๋ฅผ ์ํ ๊ฒ์ ๋๋ค.
๊ทธ๋ด๋ ์๋ง๋ ์ฐ์ฐ์๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
let button = PublishSubject<Bool>()
let textField = PublishSubject<String>()
let withLatestFrom = button.withLatestFrom(textField)
withLatestFrom.subscribe({print($0)})
textField.onNext("S")
textField.onNext("Swi")
button.onNext(true)
textField.onNext("Swif")
textField.onNext("Swift")
button.onNext(true)
//next(Swi)
//next(Swift)
์ด๋ ๊ฒ ์ค๋์ ์ฌ๋ฌ๊ฐ์ ์ต์ ๋ฒ๋ธ์ ํฉ์ณ์ฃผ๋ ์คํผ๋ ์ดํฐ์ ๋ํด์ ์์๋ณด์๋๋ฐ์.
ํน์๋ผ๋ ํ๋ฆฐ ์ ์ด ์๊ฑฐ๋ ๊ถ๊ธํ์ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์!
๋๊ธ