RxSwift - kirseia/study GitHub Wiki

ํ•™์Šต ๋ฌธ์„œ

์ •๋ฆฌ

  • Subjects ๋Š” Observer / Observable ๋‘ ์—ญํ• ์„ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ธŒ๋ฆฟ์ง€ ๋˜๋Š” ํ”„๋ก์‹œ

  • ํ•˜๋‚˜์˜ ์ด์ƒ์˜ Observable ์„ ๊ตฌ๋…ํ•˜๊ณ  ๊ฐ’์„ ๋‚ด๋ณด๋‚ด๋ฆฌ๊ณ  ํ•จ

  • PublishSubject - ๊ตฌ๋… ์ดํ›„์—๋งŒ ๊ฐ’์„ ์ „๋‹ฌ

  • ReplaySubject - ๋ฒ„ํผ ํฌ๊ธฐ ๋งŒํผ์˜ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์Œ

  • BehaviorSubject - ํ•˜๋‚˜์˜ ๋ฒ„ํผ๋ฅผ ๊ฐ€์ง€๋Š” Subject, ๊ตฌ๋… ํ›„ ๋งˆ์ง€๋ง‰ ๊ฐ’์„ ์ „๋‹ฌ

  • Variable - BehaviorSubject๋ฅผ ๊ฐ์ŒŒ์œผ๋ฉฐ complete๋‚˜ error๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ, ํ•ด์ œ ๋  ๋•Œ complete ๋ฐœ์ƒ

    • Variable์€ ์—†์–ด์ง€๊ณ  BehaviorRelay ๋กœ ๋Œ€์ฒด๋จ
  • ์ฐธ๊ณ 1

  • ์ฐธ๊ณ 2


- UI์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Subject๋ฅผ Relay ๋กœ ๋งŒ๋“  ๊ฒƒ์ฒ˜๋Ÿผ (error ์•ˆ๋‚˜๋Š”), Observable์ด ์—๋Ÿฌ๋ฅผ ๋ฌด์‹œํ•˜๋ ค๋ฉด Driver / Signal๋กœ ์จ์•ผ ํ•จ
  • ๊ธฐ๋ณธ์ด main thread ์ด Observable
  • signal ์€ subscribe ์ดํ›„์— (like publishSubject), driver ๋Š” subscribe ์‹œ์ ์— ์ด์ „๊ฐ’๋„ (like behaviorSubject)

Binder

  • Observable -> bind to -> binder
  • binder๋Š” obervable value ์— ๋ฐ˜์‘ํ•จ.
extension Reactive where Base: UIViewController {
    
    /// Bindable sink for `startAnimating()`, `stopAnimating()` methods.
    public var isAnimating: Binder<Bool> {
        return Binder(self.base, binding: { (vc, active) in
            if active {
                vc.startAnimating()
            } else {
                vc.stopAnimating()
            }
        })
    }
    
}
โš ๏ธ **GitHub.com Fallback** โš ๏ธ