You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Observable 형태로 T 타입의 데이터 snapshot을 '전달' 할 수 있는 일련의 이벤트를 비동기적으로 생성, + 다른 클래스에서 만든 값을 시간에 따라 읽을 수 있다.
하나 이상의 observers(관찰자)가 실시간으로 어떤 이벤트에 반응하고 활용하는 것이 가능
ObservableType 프로토콜은 next, completed, error 세 가지 유형의 이벤트만 방출
델리게이트 프로토콜을 사용하거나, 클래스 통신을 위해 클로저를 삽입할 필요가 없다.
Finite observable sequences
어떤 Observable sequence는 여러 타입의 값을 방출한 뒤, 성공적으로 또는 에러를 통해 종료
단발적인 데이터 스트림의 시작과 끝이 있는 상황, 자연적으로 또는 강제적으로 종료
ex. 파일 다운로드
API.download(file:"http://www...").subscribe(onNext:{ data in... append data to temporary file
},
onError:{ error in... display error alert to user
},
onCompleted:{... use downloaded file, present file into view
})
Infinite observable sequences
보통 UI 이벤트와 같은 경우 단순히 무한한 sequence
결국 이러한 시퀀스는 사실상 무한하기 때문에, 항상 최초값을 가지고 있어야 한다
해당 Observable에서는 절대 발생하지 않을 이벤트인 onError나 onCompleted parameter는 건너뛸 수 있다
UIDevice.rx.orientation
.subscribe(onNext:{ current in
switch current {
case .landscape:... re-arrange UI for landscape
case .portrait:... re-arrange UI for portrait
}})
2. Operators
Operator는 Observable을 재구성하는거나 다름없다
observableType과 Observable 클래스의 구현은 보다 복잡한 논리를 구현하기 위해 함께 구성되는 비동기 작업들을 추상화하는 많은 메소드가 포함되어 있다
해당 메소드는 매우 독립적으로 구성가능하므로 Operators(연산자) 라고 불림
연산자들은 언제나 입력된 데이터를 통해 결과값을 출력하므로, 단일 연산자가 독자적으로 할 수 있는 것보다 쉽게 연결 가능하며 훨씬 많은 것을 달성할 수 있다.
생성, 필터, 변환, 결합, 기타 유틸
생성
create: AnyObserver 타입의 emitter 방출, next, error, completed의 세 가지 타입의 유형으로 switch 문을 통해 제어
간단한 생성: just, from
필터: filter, take
변환: map, flatMap, scan
결합: combineLatest, merge, zip
유틸: do, delay, observeOn, subscribeOn
3. Schedulers
스케줄러는 UIKit에서 dispatch queue와 동일
RxSwift에는 여러가지의 스케줄러가 이미 정의되어 있으며, 99%의 상황에서 사용가능
각 색깔로 표시된 일들은 다음과 같이 각각 스케줄(1, 2, 3...)된다.
network subscription은 (1)로 표시된 Custom NSOperation Scheduler에서 구동된다.
여기서 출력된 데이터는 다음 블록인 Background Concurrent Scheduler의 (2)로 가게 된다.
최종적으로, 네트워크 코드의 마지막 (3)은 Main Thread Serial Scheduler로 가서 UI를 새로운 데이터로 업데이트 한다.
E. App Architecture
RxSwift는 이벤트나 비동기 데이터 시퀀스 등을 주로 처리하기에 아키텍쳐 자체에 영향을 주진 않는다.
MVVM 아키텍쳐는 데이터 바인딩을 제공하는 플랫폼에서 이벤트 기반 소프트웨어용으로 개발되었기 때문에, 당연히 RxSwift와 MVVM는 같이 쓸 때 아주 멋지게 작동
ViewModel을 사용하면 Observable 속성을 노출할 수 있으며 ViewController의 UIKit에 직접 바인딩이 가능하다.
이렇게 하면 모델 데이터를 UI에 바인딩하고 표현하고 코드를 작성하는 것이 매우 간단해진다.
MVC , MVP 같은 아키텍처를 선호한다면 역시 가능
The text was updated successfully, but these errors were encountered:
Ch.1 Hello RxSwift
A. RxSwift?
observable(관찰가능한)
: 인터렉션에 대한 변화를 파악 가능하고asynchronous(비동기)
: 여러 작업이 동시에 이뤄지고functional(함수의)
: 행동을 저장하고 이러한 행동은 나중에 사용이 가능하도록via schedulers(스케줄러를 통해)
: 스레드 컨트롤 및 순차적인 구성B. Cocoa and UIKit Asynchronous APIs
Notification Center, The delegate pattern, Grand Central Dispatch(GCD), Closures
C. 비동기 프로그래밍 용어들
1. State, and specifically, shared mutable state
특히 여러가지 비동기 구성요소를 공유할 때 State 관리
ex. 외부 Flag를 통한 관리, 상태에 대한 내부 프로퍼티
2. 명령형 프로그래밍
👉🏻 명령형 vs 선언형 프로그래밍
👉🏻 함수형(선언형), 반응형 프로그래밍
3. 사이드 이펙트
4. 선언형 코드
5. Reactive systems
비동기적인 데이터 흐름의 관찰
D. RxSwift 기초
observables(생산자), operators(연산자), schedulers(스케줄러)
1. Observables
Finite observable sequences
Infinite observable sequences
2. Operators
3. Schedulers
E. App Architecture
The text was updated successfully, but these errors were encountered: