본문 바로가기
iOS📱/RxSwift

[RxSwift] Debounce, Throttle

by 텅빈비니 2024. 1. 17.
반응형

안녕하세요🐶

빈지식 채우기의 비니🙋🏻‍♂️입니다.

 

이번 포스팅에서는 Debounce 와 Throttle에 대해 알아보도록 하겠습니다.


1. Debounce

  •  입력 > 입력 안되고 대기 > 일정 시간 후 입력
  • 주로 텍스트 필드 입력에 사용
  • 소스 ( 버튼 클릭 이벤트에 적용 )
debounceBtn.rx.tap.asDriver()
    .debounce(.seconds(3))	// 3초 대기 입력
    .drive(onNext: { [weak self] in
        self?.debounceCount += 1
        self?.debounceLabel.text = "\(self?.debounceCount ?? 0)"
    })
    .disposed(by: disposeBag)

Debounce 실행 결과


2. Throttle

  • 입력 > 바로 입력 > 대기
  • 주로 중복 입력 방지에 사용
  • 소스 ( 버튼 클릭 이벤트에 적용 )
throttleBtn.rx.tap.asDriver()
    .throttle(.seconds(3))	// 3차 대기 입력
    .drive(onNext: { [weak self] in
        self?.throttleCount += 1
        self?.throttleLabel.text = "\(self?.throttleCount ?? 0)"
    })
    .disposed(by: disposeBag)

Throttle 실행 결과


3. 정리

  Throttle Debounce
특징 여러번 발생하는 이벤트를 정한 시간동안 한번만 실행되도록 하는 개념 여러번 발생하는 이벤트에서 가장 마지막 이벤트 만을 싱행하도록 하는 개념

사용처 - 버튼 클릭 이벤트
- 스크롤 이벤트 ( 빠르게 내리면서 데이터 요청 )
- 자동 완성
- 연관검색어 노출

 


이상으로 Debounce, Throttle 포스팅을 마치겠습니다.

전체 소스는 아래와 같이 첨부하도록 하겠습니다. 

더보기

import Foundation

import RxSwift

import RxCocoa

 

class StudyVC: UIViewController {

    

    @IBOutlet weak var debounceBtn: UIButton!

    @IBOutlet weak var debounceLabel: UILabel!

    var debounceCount = 0

    

    @IBOutlet weak var throttleBtn: UIButton!

    @IBOutlet weak var throttleLabel: UILabel!

    var throttleCount = 0

    

    let disposeBag = DisposeBag()

    

    override func viewDidLoad() {

        super.viewDidLoad()

        

        debounceBtn.rx.tap.asDriver()

            .debounce(.seconds(3))

            .drive(onNext: { [weak self] in

                self?.debounceCount += 1

                self?.debounceLabel.text = "\(self?.debounceCount ?? 0)"

            })

            .disposed(by: disposeBag)

        

        throttleBtn.rx.tap.asDriver()

            .throttle(.seconds(3))

            .drive(onNext: { [weak self] in

                self?.throttleCount += 1

                self?.throttleLabel.text = "\(self?.throttleCount ?? 0)"

            })

            .disposed(by: disposeBag)

    }

}

다음 포스팅은 Trait 에 대해 알아보도록 하겠습니다.

감사합니다~~


참고

 

반응형

'iOS📱 > RxSwift' 카테고리의 다른 글

[RxSwift] Share(replay:)  (0) 2024.01.25
[RxSwift] Traits ( Single, Maybe, Completable )  (0) 2024.01.18
[RxCocoa] Driver  (0) 2024.01.17
[RxCocoa] Relay  (2) 2024.01.16
[ RXSwift ] Subject  (2) 2024.01.15