iOS Development/RxSwift
[RxSwift] RxSwift에 대해서 알아보기
se0m
2024. 4. 12. 19:53
RxSwift의 3가지 구성요소에 대해서 알아보자.
Observable
= Observable Sequence = Sequence
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. 인터넷 통신을 통해서 파일을 다운로드하는 상황
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