@IBAction checkButtonTouched(sender: UIButton) {
sender.isSelected = !sender.isSelected
activateButton(isSelected: sender.isSelected)
}
์ฒ์๋ถํฐ RxSwift ๋ก ๋ง๋๋ ๊ฒ์ ๋ฌด๋ฆฌ์ผ ๊ฒ ๊ฐ์์ View๋ฅผ ๋ค ์ง๊ณ ๋์์ ์ ๋๋ก ํ๋์ง ํ์ธ ํ, ์ ๋๋ก ๋์ํ๊ธธ๋ RxSwift๋ก ๋ฆฌํฉํ ๋ง์ ํ๊ณ ์ถ์๋ค.
RxCocoa ์ checkButton.rx.tap
์ด๋ผ๋ ์ข์ method ๊ฐ ์์์ง๋ง sender.isSelected
๋ฅผ ํํํ ๋ฐฉ๋ฒ์ด ์์๋ค.
๊ทธ๋์ ์ฐพ๋ ์ค Variable ์ ์ฌ์ฉํ์ฌ ๋ด๊ฐ ์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ์์ค๋ฅผ ์ฐพ๊ฒ ๋์๊ณ , ๋์ถฉ ์ดํด๋ ๊ฐ์ง๋ง ๋ญ๋ง์ด์ผ.. ๋ผ๊ณ ์๊ฐํ๊ฒ ๋์๋ค.
let checkBoxValid = Variable(true)
checkBoxValid.asObservable()
.bindTo(checkBoxButton.rx.isSelected)
.disposed(by: disposeBag)
checkBoxButton.rx.tap
.subscribe(onNext: {
checkBoxValid.value = !checkBoxValid.value
})
.disposed(by: disposeBag)
์ถ์ฒ : https://github.com/ReactiveX/RxSwift/issues/1172
Varaiable์ BehaviorSubject ์ ํ์ฌ ๊ฐ์ State ๋ก ๊ฐ์ง๋ ๋ ์์ด๋ผ๊ณ ํ๋ค. ๊ทธ๋ฅ ์ผ๋ฐ์ ์ธ ๊ฐ์ Observable ์ฒ๋ผ ๋ณด์ด๊ธฐ ์ํด ์ฌ์ฉํ๋ค๊ณ ์ค๋ช ํ๊ธฐ๋ ํ๋ค.
๊ทธ๋์ ์์ ์ฝ๋์ฒ๋ผ
Variable(true)
์ด๋ ๊ฒ ๊ฐ์ Variable ๋ก ๊ฐ์ธ์ ํํํ๊ณ subscribe
ํ๊ณ ์ถ์ผ๋ฉด .asObservable()
์ ํตํด Observable ๋ก ๊ฐ์ฃผํด์ฃผ์ด์ผ ํ๋ค..onNext()
๋์ checkBoxValie.value
์ฒ๋ผ .value
๋ฅผ ์ฌ์ฉํ๋ค..onError
, .onCompleted
์ญ์ ํ์ํ์ง ์๋ค.์ฌ์ฉ์ ์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ, Variable ์ deprecated ์ด๋ BehaviorRelay ๋ฅผ ์ฌ์ฉํ๋ผ๋ ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๊ฐ ๋ ์ BehaviorRelay ๋ก ์ฝ๋๋ฅผ ๊ณ ์ณ๋ณด์๋ค.
// checkButton : ์์ ๊นํ ์ฝ๋๋ฅผ BehaviorRelay๋ก ๋ฐ๊ฟ.
// checkButtonIsSelected ๋ผ๋ observable ๋ง๋ค์ด์,
// checkButton.isSelected ํด๋น relay๋ฅผ ๊ตฌ๋
ํ๊ฒ ํ๋ฉด ๋๋ค.
// ๋ฒํผ ๋๋ฅด๋ฉด checkButtonIsSelected ์ ์ ๋ณด ๋ณด๋ด์ ๋ฐ๋๊ฒ.
let checkButtonIsSelected = BehaviorRelay(value: false)
checkButtonIsSelected.asObservable()
.bind(to: checkButton.rx.isSelected)
.disposed(by: disposeBag)
_ = checkButton.rx.tap
.subscribe(onNext: {
checkButtonIsSelected.accept(!checkButtonIsSelected.value)
self.activateButton(isSelected: checkButtonIsSelected.value)
})
.disposed(by: disposeBag)
๋, Varaible ์ด ์๋์น ์๊ฒ ๊ฐ์ ๋ฐ๊ฟ ๊ฐ๋ฅ์ฑ์ด ์๊ณ , ์ด๋ฆ ์ญ์๋ RxSwift ์ ์ปจ๋ฒค์ ๊ณผ ๋ง์ง ์๊ณ , ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฉด์์๋ ํจ์จ์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ํ๋ค. Variable ์ด ์ง๊ด์ ์ธ ์ด๋ฆ์ด๋ผ ์ดํด๊ฐ ์ฝ๋ค๊ณ ์๊ฐํ์ง๋ง, ์ฝ๋๋ฅผ ๋ฐ๊ฟ๋ณด๋ Relay ๋ผ๋ ๊ฐ๋ ์ ์๊ณ ์๋ค๋ฉด ์ดํดํ๊ธฐ ์ด๋ ต์ง๋ ์์ ๊ฒ ๊ฐ๋ค.
์ธํด์ ํ๋ฉด์, ํ์ฌ์ ํ๋ก์ ํธ๊ฐ
๋ฅผ ์ฌ์ฉํ๋ค๋ ์ฌ์ค์ ์๊ฒ ๋์๋ค. 2, 3๋ฒ์ ๋ฉด์ ๋๋ ๋ฃ๊ธด ํ์์ง๋ง ์ ๋ถ ๊ณต๋ถํ๊ธฐ์ ๋ฌด๋ฆฌ๊ฐ ์์ด์ RxSwift 4์๊ฐ ๊ฐ์๋ง ๋จผ์ ๋ค์์๋ค. ๊ทธ๋ฐ๋ฐ... ์ถ๊ทผํ๋ฉด์ 1์ฃผ์ผ ๊ฐ ๊ธฐ์กด ์ฝ๋๋ฅผ ๊น๋ณด๊ณ ๊ฐ๋จํ ํ๋ฉด ๊ตฌํ์ ํด๋ณด๋ rx ๊ฐ ๊ณฐํ๊น๋ ๊ฐ์์ฒ๋ผ ์ฝ์ง๋ง์ ์์๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋์ ์ฝ๋ ๊ธฐ๋ฐ์ผ๋ก ๋ทฐ ์ก๋ค๊ฐ xib๋ฅผ ์ฐ๋ ์ฅ๋จ์ ์ด ๋๋ฌด ๋ช ํํ๋ค.
๊ทธ๋์ ์ฌ๋ฌ ์์ค๋ฅผ ์ฐพ์ผ๋ฉด์ ๊ณต๋ถํ๋ ์ค
RxSwift๋ ๋ณด์๋์ ์ ๋ฆฌ ์์ค๊ฐ ๋ฐ๋ผ๊ฐ๊ธฐ ์ข์ ๊ฒ ๊ฐ์์ ๋ฐ๋ผ๊ฐ๋ฉด์ ๊ณต๋ถํ๊ณ ๊ตฌํํด๋ณด๊ณ ์๋ค. GITGET ์์ฒญ ์ ์ฐ๊ณ ์๋๋ฐ ์ด๋ถ์ด ๋ง๋ ๊ฑฐ์๋ค..!!!
ํด๊ทผํ๋ฉด ๋ป์ด์ ๋ธ๋ก๊ทธ ์ธ ์๊ฐ์ด ๋ณ๋ก ์๋์ง๋ง... ํ์ดํ !!