안녕하세요🐶
빈지식 채우기의 비니🙋🏻♂️입니다.
이번 포스팅에서는 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)
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)
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 |