[RxSwift] Button rx.tap

2025. 1. 9. 21:59iOS

반응형

RxSwift에서 rx.tap은 기본적으로 UI 이벤트이기 때문에 메인 스레드에서 실행됩니다. 따라서 selectButton.rx.tap.bind 코드는 별도의 스케줄러를 지정하지 않으면 기본적으로 메인 스레드에서 실행됩니다.

이유

  • UI 관련 작업은 반드시 메인 스레드에서 실행되어야 하며, RxCocoa는 이를 보장합니다.
  • rx.tap은 ControlEvent 타입이고, 이 이벤트는 기본적으로 메인 스레드에서 동작하도록 설계되어 있습니다.

참고 코드

 
selectButton.rx.tap 
	.bind { 
    	// 이 블록 내부는 기본적으로 메인 스레드에서 실행됨 
        print("Button tapped") 
    } 
    .disposed(by: disposeBag)

 

만약 백그라운드 스레드에서 동작하도록 변경하려면 observeOn을 사용하여 스케줄러를 지정할 수 있습니다:

selectButton.rx.tap 
	.observeOn(ConcurrentDispatchQueueScheduler(qos: .background)) 
    .bind { 
    	// 이 블록은 백그라운드 스레드에서 실행됨 
        print("Button tapped on background thread") 
    } 
    .disposed(by: disposeBag)

결론

rx.tap.bind는 별도의 스케줄러를 지정하지 않으면 기본적으로 메인 스레드에서 실행됩니다.

UI 관련 작업은 그대로 두는 것이 권장됩니다.

반응형

'iOS' 카테고리의 다른 글

[API] UnexpectedRollbackException 500 Error  (1) 2025.01.10
[RxSwift] zip, combineLate  (2) 2025.01.09
iOS Universal Links (유니버셜 링크)  (2) 2025.01.09
구글로그인 해제  (0) 2025.01.09
애플로그인 계정 연동해제  (0) 2025.01.09