RxSwift실전
작성일
실사용 예시
private func bindUI() {
idField.rx.text
.subscribe(onNext: { s in
print(s)
})
.disposed(by: disposeBag)
}
bindUI 안에 이렇게 작성하면, idField에 작성할때마다 UI가 바뀐다.
private func bindUI() {
idField.rx.text.orEmpty
.subscribe(onNext: { s in
print(s)
})
.disposed(by: disposeBag)
}
orEmpty는 데이터가 있건 없건 데이터가 들어온다( 옵셔널값을 해제안해줘도 된다)(text는 들어올떄 옵셔널값이다.)
let idInputOb: Observable<String> = idField.rx.text.orEmpty.asObservable()
.asObservable()를 사용해줘야 저 타입으로 만들어 줄 수 있다.
BehaviorSubject는
초기값을가지고있으면서, 구독을 하면 그 초기값을 내려준다.
만약 구독을 도중에 다른사람이 하면, 그 구독하기 바로전까지의 마지막 값을 전달해준다.
Subject는
초기에 데이터값을 가질수도있고, 도중에 데이터를 넣어 줄 수도 있는 만능인 녀석이다.
let idValid: BehaviorSubject<Bool> = BehaviorSubject(value: false)
를 활용해서
let idInputOb: Observable<String> = idField.rx.text.orEmpty.asObservable()
let idValidOb = inInputOb.map(checkEmailValid)
idValidOb.subscribe(onNext: { b in
self.idValid.onNext(b)
})
이런 형태로 넣어줄 수 있다.
통로만 만들어두고, 나중에 밖에서 넣어줄 수 있는것이 idValid(Subject)이다.
idValidOb.subscribe(onNext: { b in
self.idValid.onNext(b)
})
이부분은
idValidOb.bind(to: idValid)
이런 형태로 바꿔서 사용할 수 있다. idValidOb에서 값이 발생하면, idValid값으로 전달이 된다는 소리이다.
간결하게 쓰면
let idInputOb: Observable<String> = idField.rx.text.orEmpty.asObservable()
가
idInputOb.map(checkEamilValid)
.bind(to: idValid)
.disposed(by: disposeBag)
데이터 스트림의 값을 담아서 idValid란 외부 스트림에 보내준 것이다.