[Swift] RxSwift 개요

준수·2022년 10월 3일
0

모든 Observable 인스턴스는 Sequence 이다

RxSwift의 요소

Observable

Observable<T>
  • Rx 코드의 기반
  • T 형태의 데이터 snapshot을 '전달' 할 수 있는 일련의 이벤트를 비동기적으로 생성하는 기능
  • 하나 이상의 observers가 실시간으로 어떤 이벤트에 반응
  • 세 가지 유형의 이벤트만 방출
enum Event<Element> {
	case next(Element) // next element of a sequence 
    case error(Swift.Error) // sequence failed with error 
    case completed // sequence terminated successfully
}

위와 같이 이벤트가 발생한 순서를 비동기적으로 Observer들에게 방출한다.

이 때, Observe를 무한히 하는지에 따라
finite Observable
infinite Observable로 나뉜다.

기본적으로 UI에 관한 Observableinfinite인 경우가 많다.

// Finite Observable
Network.download(file: "https://www...")
	.subscribe(onNext: { data in
    	//임시 파일에 데이터 추가 
    },
    onError: { error in
    	//사용자에게 에러 표현
    },
    onCompleted: { //다운로드 된 파일 사용 
    })
/// Infinite Observable
UIDevice.rx.orientation
	.subscribe(onNext: { current in
    	switch current {
        	case .landscape:
				// 가로모드 배치
            case .portrait:
				// 세로모드 배치
        }
    })

Operator

RxSwift에는 쉽게 Observable을 생성하고 변형하고 합치는 등 다양하게 연산을 할 수 있도록 도와주는 Operator 라는 것이 존재한다.

// 아래 코드에서는 방출하는 결과를 변형하거나(map), 필터링하는(filter)
// Operator를 확인할 수 있다.

UIDevice.rx.orientation
	.filter { value in
    	return value != .landscape
    }
    .map { _ in
    	return "세로로만 볼거예요!"
	}
    .subscribe(onNext: { string in 
    	showAlert(text: string)
    })

Scheduler

스케쥴러는 작업을 어디서 수행할지에 관한 작업을 추상화한다. Main thread 에서 수행할지, background 에서 수행할지 등을 정할 수 있게 해준다. Rx를 사용하지 않아도 iOS 앱을 만들 때 기존 GCD로 작업을 어디에서 수행할지 정할 수 있다.

DispatchQueuemain은 작업을 Main thread에서 수행하는 것을 의미했고, global은 백그라운드에서 수행하는 것을 의미했다. Dispatch queue뿐만 아니라 작업들을 수행하는 데에는 current thread, operation queues, new threads, thread pools, run loops 등이 사용된다.

RxSwift에서는 스케줄러를 통해 Observable을 생성하는 작업을 어디서 할지, 그리고 Observer가 시퀀스를 관찰하는 작업을 어디서 할지 정할 수 있다.

profile
🤭Swift My Velog🤭

0개의 댓글