일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- UICollectionView
- combine
- map
- 스위프트
- uitableview
- Protocol
- Observable
- tableView
- 애니메이션
- 리펙터링
- UITextView
- Xcode
- clean architecture
- ios
- rxswift
- uiscrollview
- 클린 코드
- Refactoring
- RxCocoa
- Clean Code
- ribs
- swiftUI
- SWIFT
- 리팩토링
- swift documentation
- 리펙토링
- HIG
- Human interface guide
- MVVM
- collectionview
- Today
- Total
목록Throttle (3)
김종권의 iOS 앱 개발 알아가기
기초 지식) Throttle와 Debounce 개념 throttle을 10초로 걸어놓은 경우, 이벤트가 3번 발생했을 때 첫번째 이벤트만 10초후에 실행 debounce를 10초로 걸어놓은 경우, 이벤트가 3번 발생했을 때 마지막 이벤트가 발생하고 나서 10초후에 실행 (이벤트가 도중에 들어오면 또 10초 연장된 후 발행) 차이점? throttle은 무조건 10초안에 이벤트가 하나씩 발행되고, debounce는 10초가 지나기 전에 또 다른 이벤트가 들어오면 다시 10초 딜레이 후 마지막 이벤트를 실행 사용처 throttle: 버튼 탭 debounce: 검색 입력 Debounce 직접 구현해보기 Debouncer 클래스 선언 class Debouncer { } 일정 seconds 후에 실행되어야하므로 ..
커스텀 방법 RxCocoa를 사용할 때 button.rx.tap -> button.rx.throttleTap으로 사용 // 상수 정의 struct Constants { static let throttleDurationMilliseconds = 500 } // 커스텀 throttle 정의 extension Reactive where Base: UIButton { public var throttleTap: ControlEvent { return ControlEvent(events: tap.throttle(.milliseconds(Constants.throttleDurationMilliseconds), latest: false, scheduler: MainScheduler.instance)) } }
debounce 입력 -> 바로 입력 안되고 대기 -> 일정 시간 후 입력 주로 텍스트 필드 입력에 사용 코드 (쉬운 예시를 위해서 버튼 입력에 적용) btnDebounce.rx.tap.asDriver() .debounce(.seconds(3)) .drive(onNext: { (_) in self.debounceCount += 1 self.lblDebounce.text = "\(self.debounceCount)" }).disposed(by: disposeBag) throttle 입력 - > 바로 입력 -> 대기 주로 버튼 중복 입력 방지에 사용 코드 btnThrottle.rx.tap.asDriver() .throttle(.seconds(3)) .drive(onNext: { (_) in self.thro..