티스토리 뷰

이전 글 [RxSwift] 곰튀김님의 RxSwift 강의 (1)

Subject

만들 때 부터 어떤 데이터를 내보낼지 정해져있다.

Observable처럼 값을 받을 수도 있지만 (subscribe)

외부에서 값을 통제할 수도 있다. (onNext)

AsyncSubject

completed 되는 시점에 subscribe한 애들한테 가장 마지막 값을 보내준다.

BehaviorSubject

초기값을 가지고 있어서 subscribe할 때 초기값을 보내준다. 그 후 추가로 생기는 subscribe은 가장 최근의 값을 초기값으로 보내준다.

PublishSubject

초기값 없이 subscribe 후 값이 들어오면 그대로 보내준다.

추가로 생기는 subscribe도 같다.

ReplaySubject

첫 번째 subscribe은 PublishSubject와 같지만 두 번째 subscribe부터는 이전에 있었던 값들을 한번에 보내준다.

가장 많이 쓰는 Subject는 Publish와 Behavior이다.

RxCocoa

RxCocoa는 RxSwift 요소들을 UIKit View들에게 extension으로 적용해놓은 것이다.

// UILabel
label.rx.text // Binder 타입 bind 시킬 수 있다.

UI와 관련된 작업을 처리하기 때문에 항상 Main Thread에서 동작해야한다.

viewModel.itemsCount
            .map { "\\($0)" }
            .observeOn(MainScheduler.instance)
            .bind(to: itemCountLabel.rx.text)
            .disposed(by: disposeBag)

observeOn으로 MainScheduler로 설정해줘야한다.

viewModel.itemsCount
            .map { "\\($0)" }
            .catchErrorJustReturn("")
            .observeOn(MainScheduler.instance)
            .bind(to: itemCountLabel.rx.text)
            .disposed(by: disposeBag)

UI와 관련된 것이기 때문에 에러처리가 필요하다.

catchErrorJustReturn으로 에러가 발생하면 빈 문자열을 보내게 하는 것도 가능하다.

observeOn과 catchErrorJustReturn의 처리는 항상 필요하다.

viewModel.itemsCount
            .map { "\\($0)" }
            .asDriver(onErrorJustReturn: "")
            .drive(itemCountLabel.rx.text)
            .disposed(by: disposeBag)

항상 UI Thread(Main Thread)에서 동작하는 Driver로 처리할 수 있다.

Relay

Relay는 에러가나도 끊어지지 않는 Subject이다.

Reley는 onNext대신 accept를 사용한다.

// Subject
self.menuObservable.onNext($0)

// Relay
self.menuObservable.accept($0)

MVVM

화면에 어떤 내용을 그려야할지 ViewModel에서 가지고 처리하고 View에서는 아무런 처리를 하지 않고 화면에 가지고있는 것과 이벤트만 넘겨준다.

모든 동작과 데이터 처리는 ViewModel에서 진행한다.

'iOS > RxSwift' 카테고리의 다른 글

[RxSwift] Hot Observable, Cold Observable  (0) 2022.12.18
[RxSwift] Subject, Relay, Driver  (0) 2022.12.17
[RxSwift] 곰튀김님의 RxSwift 강의 (1)  (0) 2022.12.12
[RxSwift] RxSwift는 뭔가?  (0) 2022.11.14
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함