MVVM with RxSwift - kirseia/study GitHub Wiki

๊ตฌ์กฐ

VC  - ์†Œ์œ  -> View Model - ์†Œ์œ  -> Model 
       - ๋ฐ”์ธ๋”ฉ -                   <- noti 
  • ViewModel ์ƒ์„ฑ์ž๋กœ Model ์„ ๋„ฃ์–ด์ค€๋‹ค.
  • ViewModel ์€ input / output ์œผ๋กœ ๊ตฌ๋ถ„

ViewModel

  • Input ์€ -> user action ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฐ’, Observer (View์˜ TextField, Button ๋“ฑ์ด -> subscribe(input) ํ˜•ํƒœ)
  • Output ์€ ํ™”๋ฉด ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’, Observable (View์—์„œ Output.subscribe(...) ํ˜•ํƒœ)

VC

  • viewModel์˜ observable (output)์„ label / view ๋“ฑ์— bind ํ•œ๋‹ค.

  • viewModel output ์ด ๋ฐ”๋€Œ๋ฉด ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋˜๋„๋ก.

  • Button ๋“ฑ ์•ก์…˜์„ bind ํ•œ๋‹ค.

  • ์•ก์…˜์ด ์ด๋ค„์ง€๋ฉด viewmodel์˜ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•ด์„œ view model / model ์„ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.

์ •๋ฆฌ?

  • RxRelay๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด BehaviorRelay(์ตœ์ดˆ ๊ฐ’์„ ๊ฐ–๋Š”)๊ณผ PublishRelay ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • error์™€ completed ๋ฅผ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ.
  • Driver ๋Š” RxCocoa๋กœ ์ œ๊ณต๋œ UI ์กฐ์ž‘ ํŠนํ™” Observable, ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์ฒ˜๋ฆฌ๋˜๋Š” ํŠน์ง•์žˆ์Œ.

Ref.