λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🍎 iOS/RxSwift

[iOS] RxSwift - Observables 생성과 ꡬ독, 생λͺ…μ£ΌκΈ°, operator

by Danna 2021. 7. 11.
728x90
728x90

πŸ’‘ ReacitveX - Observable 

  • ReactiveX μ—μ„œ Observer λŠ” Observable 을 subscribe ν•œλ‹€.
  • observer λŠ” Observable 이 λ°©μΆœν•˜λŠ” μ•„μ΄ν…œ (단일 ν˜Ήμ€ μ‹œν€€μŠ€)에 μ‘λ‹΅ν•œλ‹€. 
  • 이λ₯Ό 톡해 λ™μ‹œμ„±(concurrency) 연산이 κ°€λŠ₯ν•˜λ‹€.
  • Observable 이 객체λ₯Ό λ°©μΆœν•  λ•ŒκΉŒμ§€ 기닀릴 ν•„μš” 없이, 객체가 방좜되면 κ·Έ μ‹œμ μ„ κ°μ‹œν•˜λŠ” κ΄€μ°°μžλ₯Ό observer 내에 두고, κ·Έλ₯Ό 톡해 μ•Œλ¦Όμ„ λ°›λŠ”λ‹€.

 

βœ”οΈŽ Observer 생성 & ꡬ독

비동기 λͺ¨λΈμ—μ„œλŠ” μ•„λž˜μ™€ 같은 νλ¦„λŒ€λ‘œ μ½”λ“œκ°€ μ‹€ν–‰λœλ‹€.

 

  • async method 호좜둜 κ²°κ³Όλ₯Ό 리턴받고, ν•„μš”ν•œ λ™μž‘μ„ μ²˜λ¦¬ν•˜λŠ” method λ₯Ό μ •μ˜ν•œλ‹€. * Observer 의 일뢀
  • Observable 둜 비동기 ν˜ΈμΆœμ„ μ •μ˜ν•œλ‹€.
  • subscribe λ₯Ό 톡해 observer λ₯Ό Observable 객체에 μ—°κ²°μ‹œν‚¨λ‹€.
  • onNext event λ°œμƒμ‹œ μˆ˜ν–‰ν•  μ½”λ“œλ₯Ό κ΅¬ν˜„ν•œλ‹€.
🌱 Observable 의 생λͺ…μ£ΌκΈ°
1. Create 
2. Subscribed 
3. Next (μˆ˜ν–‰)
- - - 끝 - - - 
4. Completed / Error 
5. Disposabled

 

βœ”οΈŽ Observable 을 μƒμ„±ν• λ•Œ μ΄μš©ν•˜λŠ” operator

  • Observable 을 μƒμ„±ν•˜λŠ” κΈ°λ³Έ operator
  • observer 의 onNext, onError, onCompleted λ©”μ†Œλ“œλ₯Ό 적절히 ν˜ΈμΆœν•΄ μž‘μ„±ν•  수 μžˆλ‹€.
  • Observable 생성 ν›„, 전달할 데이터λ₯Ό onNext(data) λ₯Ό 톡해 μ „λ‹¬ν•˜κ³ , onCompleted() λ₯Ό 톡해 μ’…λ£Œν•œλ‹€. 
  • Error μ²˜λ¦¬κ°€ ν•„μš”ν•  경우 onError(error) λ₯Ό 톡해 μ „λ‹¬ν•œλ‹€.
  • observer 의 onCompleted ν˜Ήμ€ onError λ©”μ†Œλ“œκ°€ ν•œλ²ˆμ€ ν˜ΈμΆœλ˜μ–΄μ•Ό ν•œλ‹€.

 

  • Observables.create 와 onNext(data) λ₯Ό ν•œ λ²ˆμ— μ‚¬μš©ν•  수 μžˆλŠ” operator 이닀.
  • 데이터가 단 ν•˜λ‚˜λ§Œ μžˆμ„ 경우 Just λ₯Ό μ΄μš©ν•œλ‹€. 
  • 데이터 ν•œκ°œλ₯Ό μ „λ‹¬ν•˜λŠ” κ²ƒμ΄μ§€λ§Œ, λ°°μ—΄ ν•˜λ‚˜λ₯Ό 전달할 μˆ˜λ„ μžˆλ‹€. 이 λ•Œμ—λŠ” event κ°€ ν•œ 번 λ°œμƒν•œλ‹€.

 

  • Observables.create 와 onNext(data) λ₯Ό ν•œ λ²ˆμ— μ‚¬μš©ν•  수 μžˆλŠ” operator 이닀.
  • 데이터λ₯Ό μ—¬λŸ¬κ°œ, 각 이벀트둜 전달할 경우 From 을 μ΄μš©ν•œλ‹€.
  • From으둜 μ „λ‹¬λ˜λŠ” λ°μ΄ν„°λŠ” array νƒ€μž…μœΌλ‘œ, 각 λ°°μ—΄μ˜ μ›μ†Œκ°€ λ°μ΄ν„°λ‘œ μ—¬λŸ¬λ²ˆμ˜ event 둜 μ „λ‹¬λœλ‹€.

βœ”οΈŽ κ·Έ μ™Έμ˜ Create κ΄€λ ¨ operator 

  • Empty :: λΉ„μ–΄μžˆλŠ” observable 을 μ „λ‹¬ν•˜κ³  싢을 λ•Œ μ΄μš©ν•œλ‹€.
  • Never :: μ ˆλŒ€ observable 을 μ „λ‹¬ν•˜μ§€ μ•Šμ„ 경우 μ΄μš©ν•œλ‹€.
  • Throw :: observable 을 μƒμ„±ν•˜κ³ , error λ₯Ό 전달할 경우 μ΄μš©ν•œλ‹€.

 

728x90
728x90