clamp
Clamp
clamp
글쓰기 관리
전체 방문자
오늘
어제
  • 분류 전체보기 (509)
    • IOS (85)
    • SwiftUI+TCA+Combine (9)
    • RxSwift + MVVM (56)
    • Clean Architecture (12)
    • SWIFT (56)
    • iOS - TDD (2)
    • 디자인패턴 (4)
    • CS (56)
      • 알고리즘 (29)
      • 운영체제 (15)
      • 자료구조 (2)
      • 네트워킹 (4)
      • 기타 (6)
    • 회고 (0)
    • Firebase (18)
    • SwiftUI (10)
    • iOS - UIKit (11)
    • iOS - 오픈소스 (6)
    • 코딩테스트 (166)
      • 프로그래머스 (164)
    • 정보처리기사 (14)
    • GitHub (2)
글쓰기 / 관리자

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Swift
  • ㅅ
  • Q
  • uikit

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

[RxSwift] throttle, debounce
RxSwift + MVVM

[RxSwift] throttle, debounce

2023. 7. 20. 15:23

throttle( x, latest = true)

  • 주로 버튼의 중복 입력 방지에 사용된다.
  • latest 의 기본값은 true이다.

 

코드 

 

let input = EditProfileViewModel.Input(
            imageViewButtonTapped: profileImageView.button.rx.tap
                .throttle(.seconds(10), scheduler: MainScheduler.asyncInstance),

 

이렇게 설정하게 되면 Input으로 첫 Event가 발생하면 Event를 방출하고 10초동안 무시한 뒤 10초가 지나면 가장 마지막이벤트를 전달한다.

 

물론 1개의 이벤트만 발생했다면 최초 1개의 이벤트만 방출한다.

 

let input = EditProfileViewModel.Input(
    settingButtonTap: settingButtonTapSubject
    .throttle(.seconds(10), latest: false, scheduler: MainScheduler.asyncInstance)

 

latest = false로 설정하게 되면 첫 번째 이벤트가 발생하고 10초동안의 이벤트를 무시한다. 

 

언제나 글은 어려우니 쉽게 ..

 

* latest = true

 

* latest = false

 

MVVM의 InOut 패턴을 구현할 당시 셀위에에 존재하는 버튼(이미지뷰)를 뷰모델에 바인딩 해야하는데 RxDataSource를 활용해 컬렉션뷰를 만들던 중 셀에 바인딩이 여러번되어 nextEvent를 여러번 전달하게되는 이슈가 발생했다. 

 

같은 이벤트의 전달로 같은 동작을 반복하게 되므로 이 문제를 해결해야 했는데 이 때 적용한 방법이 throttle이다.

 

 

Debounce(x)

  • timer로 지정된 x동안 새로운 이벤트가 발생하면 이전이벤트는 무시되고 Timer가 초기화된다.
  • Debounce는 반대로 x동안 무시하다가 마지막으로 발생한 이벤트를 방출한다.
  • 이벤트 시작과 동시에 timer가 작동되지만, timer 내에 다른 이벤트가 없어야 마지막 이벤트 발생시점부터 x 시간이 흐른 후 이벤트가 방출된다.
  • 유저의 마지막 이벤트를 기다리는 느낌?

여전히 말은 어려우니 그림으로 보자 !

 

사용 예시 )

 SearchBar가 있다고 해보자.. 유저가 한글자 한글자 입력할 때 마다 계속 검색을 위해 API콜을 한다면 리소스 낭비가 심할것이다.

 a..ap..app...appl....apple...

apple을 검색하기 위해 5번의 API콜을 하게된다.

 

반면  Debounce를 활용해서 유저가 0.5 내에 발생시킨 마지막 이벤트만 검색을 한다면?  

0.5초에 3타를 칠수있는 유저라 가정하자!

app....apple

apple을 검색하기 위해 2번의 API콜이면 충분하다

 

 

아이패드로 글씨쓰기 어렵네요..!

 

 

저작자표시 비영리 동일조건 (새창열림)
    'RxSwift + MVVM' 카테고리의 다른 글
    • [RxSwift] CollectionView또는 TableView 셀의 UIImageView or UIButton 클릭 이벤트 처리
    • [RxSwift] RxDataSource로 CollectionView 사용하기
    • RxSwift를 이용한 method 호출 구독
    • [Rx + MVVM] Input과 Output을 사용한 MVVM
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바