[TIL] RxSwift bind 사용법

Eden·2025년 7월 29일

bind는 RxCocoa에서 제공하는 연산자로, Observable의 결과를 UI 컴포넌트에 바인딩할 때 주로 사용됩니다.
RxSwift 단독에서는 사용하지 않으며, RxCocoa의 확장을 통해 사용됩니다.


기본 개념

  • bind메인 스레드에서 실행됩니다.
  • 에러를 방출하지 않는 Driver, ControlProperty, ControlEvent 등의 시퀀스와 함께 주로 사용됩니다.
  • UI 관련 작업은 반드시 메인 스레드에서 해야 하므로 bind는 자연스럽게 UI 작업에 적합합니다.

bind 사용법 예시

// 예시: 텍스트 필드의 텍스트를 레이블에 바인딩
textField.rx.text
    .orEmpty
    .bind(to: label.rx.text)
    .disposed(by: disposeBag)
  • textField.rx.text: Observable<String?> (ControlProperty)
  • orEmpty: 옵셔널 해제
  • label.rx.text: Binder

bind vs subscribe

항목bindsubscribe
스레드메인 스레드 고정아무 스레드에서든 동작 가능
에러 처리불가능 (에러 없는 시퀀스만 사용)에러 처리 가능
주 용도UI 바인딩로직 처리, 상태 변경 등
반환 타입DisposableDisposable

커스텀 Binder 사용하기

extension Reactive where Base: UILabel {
    var myText: Binder<String> {
        return Binder(self.base) { label, text in
            label.text = ">>> " + text
        }
    }
}

// 사용 예시
viewModel.titleText
    .bind(to: label.rx.myText)
    .disposed(by: disposeBag)
  • Binder는 항상 메인 스레드에서 동작하며, 사이드 이펙트 없이 안전하게 바인딩합니다.

주의사항

  • bind는 UI 바인딩용이므로 비즈니스 로직 처리에는 적합하지 않습니다.
  • 에러를 방출할 수 있는 Observable은 사용하지 마세요. (예: Observable.error)

요약

  • bind는 RxCocoa에서 UI 컴포넌트에 안전하게 바인딩할 수 있도록 도와주는 메서드입니다.
  • 주로 Driver, ControlProperty, ControlEvent, Binder와 함께 사용됩니다.
  • UI 업데이트는 반드시 메인 스레드에서 이루어져야 하므로 bind를 선호합니다.
profile
iOS Dev

0개의 댓글