Observable<T>
- T형태(Type)의 데이터 snapshot을 '전달'할 수 있는 일련의 이벤트를 비동기적(asynchronous)으로 생성하는 기능
- Observable = Observable Sequence = Sequence
- 다른 클래스에서 만든 값을 시간에 따라서 읽을 수가 있다
- 하나 이상의 observer가 실시간으로 어떤 이벤트에 반응, 세 가지 유형의 이벤트만 방출 (next, error, completed)
- Observable들은 일정 기간 동안 계속해서 이벤트를 생성(emit)
- next라는 이벤트는 T에 해당하는 형태(Type)의 Element를 전달함, 클로저로 Element를 다룰 수 있음.
- completed는 성공적으로 일련의 이벤트들을 종료시키는 것, Observable은 종료됨
- error는 Swift에러를 감싸서 내뱉게 되는데, Observable이 에러를 발생시켜 추가적으로 이벤트를 생성하지 않을 것을 의미, 에러와 함께 Observable은 종료됨
- tap과 같은 제스처도 element로 사용 가능 (rxCocoa의 기능과 함께 사용가능)
- Observable 생명주기
- Observable은 어떤 구성요소(elemnet)를 가지는 next이벤트를 계속해서 방출할 수 있음
- Observable은 error이벤트를 방출하여 완전 종료될 수 있음
- Observable은 complete 이벤트를 방출하여 완전 종료 될 수 있음
- .next 이벤트는 어떠한 Element 인스턴스를 가지고 있는 것을 확인할 수 있다.
- .error 이벤트는 Swift.Error 인스턴스를 가진다.
- .completed 이벤트는 아무런 인스턴스를 가지지 않고 단순히 이벤트를 종료시킨다.
public enum Event<Element> {
/// Next elemet is produced.
case next(Element)
/// Sequence terminated with an error.
case error(Swift.Error)
/// Sequence completed successfully.
case completed
}
- 사용 예시
let observable = Observable<Int>.just(1) // 오로지 1(Int 타입)만을 방출
observable.subscribe(
onNext: { data in
print(data) // 1
},
onError: { error in
print(error) // error 시 error코드 방출 후 종료
},
onCompleted: {
print("completed") // 성공적으로 완료되면 무엇도 방출하지 않고 종료
},
onDisposed: {
print("dispose done") // 종료 후 disposed
}
)
//위 코드와 같은 맥락의 코드
let observable = Observable<Int>.just(1)
observable.subscribe { event in
switch event {
case .next(let value):
print(value)
case .error(let error):
print(error)
case .completed:
print("completed")
}
}
.disposed(by: self.disposeBag)
'rxSwift' 카테고리의 다른 글
[rxSwift] Observable create 하는 법 (0) | 2022.10.20 |
---|---|
[rxSwift] Observable subscribe 하는 법 (0) | 2022.10.19 |
[rxSwift] 기본적인 Observable 의 종류 (0) | 2022.10.19 |
[rxSwift] Observable 에 대한 이해 (0) | 2022.10.18 |
rxSwift의 장단점 (0) | 2022.10.17 |