[221025] TIL
Taehyeon-Kim opened this issue · 4 comments
Taehyeon-Kim commented
Stream
Sequence, Iterator Protocol
Observable
- 이벤트 전달 객체
- 게으른 연산
Observer
- 이벤트 구독 객체
Infinite observable sequences
- ex. touch, text-field text
- 언제 끝날지 모르는 이벤트
- error, completed 발생 x
Finite observable sequences
- ex. 점진적 다운로드
- 네트워크 연결 유실, 다운로드 실패, 상태 코드 오류, 디코딩 실패 등으로 Error 발생 가능 -> dispose
- 다운로드 성공 완료로 Completed 발생 가능 -> dispose
Taehyeon-Kim commented
DisposeBag
자자!
- 기본적으로 ViewController가 deinit 되면, 알아서 disposeBag도 동작한다.
- 만약 deinit이 정상적으로 안된다면 순환 참조 문제를 신경써봐야 한다.
- 예외 케이스가 있다면 DisposeBag() 객체를 새롭게 넣어주거나, nil을 할당해주어야 한다.
- ex. RootView에서 Infinite Sequence가 존재하는 경우
Taehyeon-Kim commented
순환 참조 문제 해결
// 기존 해결 방법
signUpButton.rx.tap
.subscribe { [weak self] _ in
let alert = UIAlertController(title: "Good", message: nil, preferredStyle: .alert)
let ok = UIAlertAction(title: "Ok", style: .cancel)
alert.addAction(ok)
self?.present(alert, animated: true)
}
.disposed(by: disposeBag)
// RxSwift 6부터의 해결 방법
signUpButton.rx.tap
.withUnretained(self)
.subscribe { vc, _ in
let alert = UIAlertController(title: "Good", message: nil, preferredStyle: .alert)
let ok = UIAlertAction(title: "Ok", style: .cancel)
alert.addAction(ok)
vc.present(alert, animated: true)
}
.disposed(by: disposeBag)
Taehyeon-Kim commented
Observable의 한계
- 이미 정해진 값을 방출만 한다.
- 그 말인 즉슨, 변경이 불가하다!!
- 아유 불편해
Subject의 등장 배경
- 나는 값을 방출하고 싶고 동시에 구독도 하고 싶어.
- Subject(왈) : 그래 내가 해줄게.
Taehyeon-Kim commented
Subject
옵저버블, 옵저버의 역할을 모두 하는 녀석
- Publish Subject
- Behavior Subject
- Replay Subject
- Async Subject