iOS Development/RxSwift

[RxSwift] RxSwift에 대해서 알아보기

se0m 2024. 4. 12. 19:53

RxSwift의 3가지 구성요소에 대해서 알아보자.

 


 

Observable

= Observable Sequence = Sequence

 

Observable의 실행 흐름

 

Observable<T>

 

개념

  • iOS에서 기본적으로 제공하는 Sequence 타입과 동일(배열과 같이 개별 요소들을 하나씩 순회 가능)
  • T 형태의 데이터 snapshot을 전달할 수 있는 일련의 이벤트를 비동기적으로 생성하는 기능
  • 일정 기간 동안 계속해서 이벤트 생성(emit)할 수 있기 때문에 다른 클래스에서 만든 값을 시간에 따라서 읽을 수 있는 기능 구현 가능
  • 하나 이상의 Observers(Observable을 바라보는 관찰자)가 실시간으로 어떤 이벤트에 반응하므로 UI 처리에 활용 가능

 

세 가지 유형의 이벤트만 방출

enum Event<Element> {
    case next(Element) // 다음(최신) 데이터 전달
    case error(Swift.Error) // Error를 발생시켜서 추가적으로 이벤트를 발생하지 않음
    case completed // 성공적으로 일련의 이벤트들을 종료
}

 

Finite Observable

  • ex. 인터넷 통신을 통해서 파일을 다운로드하는 상황

 

Marble Diagram: 시간의 흐름에 따라서 값을 표시하는 방식(https://rxmarbles.com/)

 

Network.download(file: "https://www...")
    .subscribe(
    	onNext: { data in
            // 임시 파일에 데이터 추가
        },
        onError: { error in
            // 사용자에게 에러 표현
        },
        onCompleted: {
            // 다운로드된 파일 사용
        }
    )

 

Infinite Observable

  • ex. 기기의 가로/세로 모드에 따라 반응(대부분의 UI 이벤트들은 무한한 시퀀스로 동작)
UIDevice.rx.orientation
    .subscribe(
        onNext: { current in
            switch current {
            case .landscape:
                // 가로모드 배치
            case .portrait:
                // 세로모드 배치
            }
        }
    )

 

Operator

개념

  • Observable의 이벤트를 입력 받아서 결과로 출력하는 연산자
  • 다양한 형태의 값을 걸러내거나 변형하거나 하나로 합칠 수 있음(filter, map, ...)
UIDevice.rx.orientation
    .filter { value in
        return value != .landscape
    }
    .map { _ in
        return "세로로만 볼 수 있어요!"
    }
    .subscribe(
        onNext: { string in
            showAlert(text: string)
        }
    )

 

Scheduler

개념

  • RxSwift에는 여러 가지 Scheduler가 미리 정의되어 있고 대부분의 일반적인 상황에서 사용 가능 → 직접적으로 생성하거나 커스텀할 일은 거의 없음
  • RxSwift의 DispatchQueue라고 생각하면 됨
    • Main Scheduler, Background Scheduler