티스토리 뷰
이전 글 [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
- Protocol
- SwiftUI
- OCR
- rxswift
- file private
- docker
- 곰튀김
- IOS
- 의미있는이름
- strcut
- Swift
- onTapGesture
- enumerations
- ObservedObject
- Generic
- 카메라
- CodingTest
- kakao
- Xcode
- frame과 bounds 차이
- AWS Fargate
- ChatGPT
- Custom
- navigation
- Login
- tabview
- AWS
- Git
- delegate
- MVVM
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |