๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS

[RxSwift] UITextField๋กœ ๊ฒ€์ƒ‰ํ•˜๊ธฐ(debounce, distinctUntilchnaged, share)

by ํ‹ด๋”” 2022. 10. 10.
728x90
๋ฐ˜์‘ํ˜•

debounce

์ถœ์ฒ˜ : ReactiveX

  • debounce๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ์‹œ๊ฐ„ (timespane) ๋‚ด์— ๋ฐฉ์ถœ๋˜๋Š” ๊ฐ’์—์„œ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๊ฐ’์„ ๋ฐฉ์ถœํ•จ
  • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐฉ์ถœํ•˜๊ณ  ๋‚˜๋ฉด timespane์€ ์ดˆ๊ธฐํ™” ๋จ
  • ์ฃผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ƒ‰ํ•„๋“œ์—์„œ ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•  ๋•Œ๋งˆ๋‹ค ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ณด์—ฌ์ฃผ๊ธฐ ๋ณด๋‹ค๋Š” debounce๋กœ timespane ๋‚ด์— ๋งˆ์ง€๋ง‰ ์ž…๋ ฅ์— ๋Œ€ํ•ด ๊ฒฐ๊ณผ๊ฐ’์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Œ

 

distinctUntilchanged

์ถœ์ฒ˜ : https://rxmarbles.com/#distinctUntilChanged

  • ์ค‘๋ณต๋œ ๊ฐ’์ด ์ž…๋ ฅ๋˜๋ฉด ํ•ด๋‹น ๊ฐ’์„ ๋ฌด์‹œํ•จ
  • ์‚ฌ์šฉ์ž๊ฐ€ ํ…์ŠคํŠธ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ž…๋ ฅํ•œ ๊ฒฝ์šฐ ๊ฐ€์žฅ ์ฒ˜์Œ์— ์ž…๋ ฅ๋œ ํ…์ŠคํŠธ๋งŒ ๋ฐฉ์ถœ๋จ
  • UITextField์˜ ๊ฒฝ์šฐ .allEditingEvents์— ์˜ํ•ด ์ž…๋ ฅ ์‹œ์ž‘, ์ž…๋ ฅ๋œ ๊ฐ’์˜ ์ˆ˜์ •, ์ž…๋ ฅ ๋์ผ ๋•Œ ๊ฐ’์„ ๋ฐฉ์ถœํ•˜๊ฒŒ ๋จ. distinctUntilChnaged ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ž…๋ ฅ๋œ ๊ฐ’์˜ ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚˜์•ผ ๋ฐฉ์ถœ๋˜๋ฏ€๋กœ ์ž…๋ ฅ์ด ๋๋‚  ๋•Œ, ์ˆ˜์ •์„ ์‹œ์ž‘ํ•  ๋•Œ ๊ฐ’์„ ๋ฐฉ์ถœํ•˜์ง€ ์•Š์Œ
  • (app์—์„œ l ์ž…๋ ฅ -> appl -> ์ˆ˜์ • ๋ -> appl ์ด๋ฏ€๋กœ ๋ฐฉ์ถœ๋œ ๊ฐ’์ด ์ด์ „ ๋ฐฉ์ถœ๋œ ๊ฐ’๊ณผ ๊ฐ™์Œ -> distinctUntilChnaged์— ์˜ํ•ด ๊ฐ’์ด ๋ฐฉ์ถœ๋˜์ง€ ์•Š์Œ)

skip

  • UITextField์˜ ์ˆ˜์ •์ด ์‹œ์ž‘๋  ๋•Œ ์ฒ˜์Œ ๋นˆ ๊ฐ’์„ ์Šคํ‚ตํ•ด์ฃผ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ skip(1) ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

 

share

  • ๊ตฌ๋…์ž๊ฐ€ ์—†์„ ๋•Œ ๋ฒ„ํผ๋ฅผ ์œ ์ง€ํ•œ ๋’ค ๊ตฌ๋…์ด ์‹œ์ž‘๋˜๋ฉด ์ƒˆ๋กœ์šด ๊ตฌ๋…์ž๋Š” ์ฆ‰์ง€ ๋ฒ„ํผ์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • ๊ตฌ๋…ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋ฐฉ์ถœํ•˜์ง€ ์•Š์Œ

์™„์„ฑ ์ฝ”๋“œ

        let searchObservable = input.searchText
            .debounce(.milliseconds(300))
            .distinctUntilChanged()
            .skip(1)
            .asObservable()
            .share(replay: 1, scope: .whileConnected)

 

์ถœ์ฒ˜ ๋ฐ ์ฐธ๊ณ  ์‚ฌ์ดํŠธ

https://reactivex.io/documentation/ko/operators/debounce.html

 

ReactiveX - Debounce operator

The first variant — called either debounce or throttleWithTimeout — accepts as its parameter a duration, defined as an integer number of milliseconds, and it suppresses any emitted items that are followed by other emitted items during that duration sin

reactivex.io

 

https://velog.io/@dvhuni/UITextField%EC%97%90%EC%84%9C-rx.text%EB%A1%9C-%EB%B3%80%EA%B2%BD%EB%90%9C-%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC-%EA%B0%90%EC%A7%80%ED%95%98%EA%B8%B0

 

UITextField์—์„œ rx.text๋กœ ๋ณ€๊ฒฝ๋œ ํ…์ŠคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๊ธฐ

๋ฐ์ผ๋ฆฌ ์ด์Šˆ์˜ ์„ธ๋ฒˆ์งธ ํฌ์ŠคํŠธ !!

velog.io

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€