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란 외부 스트림에 보내준 것이다.