RxSwift 4시간에 끝내기 오프라인 강좌 링크
ReactiveX 공식
RxSwift Github
operator 마블 그림으로 볼 수 있는 곳
RxMarbles: Interactive diagrams of Rx Observables
RxSwift 4시간에 끝내기 유투브
RxSwift 4시간에 끝내기 시즌0 - YouTube
- Moya ('나중에줄게' 를 single로 준다)(Alamofire 다음으로 유행하는 swift 네트워크 라이브러리)
- Bolts (옵씨 리엑티브 유행)
- PromiseKit (JS 리엑티브 유행)
- ipthread : POSIX C API
→ Thread : obj-c, Swift
→ Operation : obj-c, Swift
→ OperationQueue (쓰레드가 너무 많으면 효율이 떨어지기 때문에 ) : 애플이 몇개 만들어놓은 GCD
- 위와 같은 것을 Concurrency Programming 이라고 한다.
- 그 중에서 다중 CPU로 한다면 병렬 프로그래밍이다.
- DispatchQueue
- serial : main (UI only)
- sync
- async
- concurrency : global
- sync
- async
- serial : main (UI only)
RxSwift를 쓰면 가장 좋은 점! (개인적으로)
- async를 sync하게 프로그래밍할 수 있다. (사람은 sync하게 생각하기 때문)
- operator들의 동작흐름을 마블그림으로 시각적으로 이해하기 쉽다.
Observerble
- ‘나중에줄게’ (PromiseKit - Promise, Bolts - Task, RxSwift - Observerble)
- ‘나중에오면’ (PromiseKit - .done .catch, Bolts: .continueWith, RxSwift - .subscribe)
Scheduler
- .observeOn
- 다음줄부터 적용
- .subscribeOn
- 어디서든지 시작시점(subscribe)에 적용됨
Operation
- rxswift에 있고 bolts, promisekit에 없는 것
- .zip
- 네트워크 요청 이쪽과 저쪽의 결과가 다 왔을때 보고자 하는 경우
- .combineLatest
- 어느 한쪽이라도 결과가 왔을 때 실행하여 두 결과를 합치고자 할 때 (예: id, pw textfield)
- .distinctUntilChanged()
- 데이터가 중복될 때 말고 새로 바뀔 때만 알려줘.
- rxmarbles 앱
- ReactiveX operator를 마블 그림으로 볼 수 있는 ios 앱. 데이터를 생성 수정하여 결과를 마블 그림으로 볼수 있다.
Subject
- ‘나중에줄게’ (PromiseKit - Promise, Bolts - Task, RxSwift - Observerble)
- ‘나중에오면’ (PromiseKit - .done .catch, Bolts: .continueWith, RxSwift - .subscribe)
- ‘그걸 밖에서 줄게’ == Subject
- 외부에서 발생한 데이터를 옵저버블로 넘기고 싶을 때 사용
- publishSubject
- 옵저버블 이기도하고 옵저버 이기도 함
- asyncSubject
- 예 : detail page에서 ‘좋아요’를 눌렀다 껐다를 반복하는 경우 detail page가 닫힐 때 complete 되어서 데이터를 구독하고 있는 모든 화면에 complete 될 때의 마지막 데이터만 보내줄때 쓴다.
- BehaviorSubject
- 기본적으로는 publish와 크게 다르지 않지만 초기 값을 가진 subject
- subscribe가 발생하면 즉시 현재 저장된 값을 이벤트로 전달한다.
- 마지막 이벤트 값을 저장하고 싶을 때 사용한다.
- Variable
- DEPRECATED! → BehaviorRelay로 대체
- behavior를 감싸고 있으며, complete, error 가 발생하지 않음
- 해제될 때 자동으로 complete 호출
Relay
- iOS에서 UI 이벤트를 구성하기 위해 주의해야 할 점
- 에러를 발생시키지 않는다
- 메인 스케줄러에서 동작해야 한다
- side-effect를 공유한다
UI는 에러(혹은 complete)가 나도 끊어지면 안된다 (무시해야 함)!-> 원래는 catchErrorJustReturn(false) 등등 데이터 되돌리기도 해야함-> .asDriver(onErrorJustReturn: false) 한방에 끝
UI에서는 Subject 대신에 사용
- Subject → Relay
- Observerble → Driver
BehaviorRelay
- Variable (현재 deprecated) → BehaviorRelay
- behaviorSubject를 한번 더 감싸고 있으며 behaviorSubject와 다른점은 error나 completed 가 발생하지 않는다
- 해제될 때 자동으로 completed 호출한다
disposable : 작업을 취소하는 코드를 넣으면 좋다
stream 끝 == 에러(->끝) == completed == disposable되다 == 죽다
옵저버 : emitter, 데이터 만들어 줌(생성)
- cold observable : subscribe 해야만 실행
- hot observable : 반대
MVVM : ui에 관련된 로직만 따로 뷰모델로 빼면 그게 MVVM
side-effect : 다른곳에서 무언가를 처리해야 할 때 .do .subscribe 에서만 한다.
18년 가을 <let us: Go!> advanced Higher-Order function 유투브 영상 (rxswift 보다 깊은 원리를 알고 싶으면)
댓글