iOS/RxSwift
[RxSwift] Observable
최지철
2023. 9. 14. 16:41
반응형
Observable<Int>.create{ (observer) -> Disposable in
observer.on(.next(0))
observer.onNext(1)
observer.onCompleted()
return Disposables.create()
}
Observable, Observer, Subsribe
- Observable은 이벤트를 전달
- Observer는 Observable를 감시하고 있다가 전달되는 이벤트를 처리
- Observable를 감시하는 것을 Subsribe라 표현(구독한다)
Observable은 3가지 이벤트를 전달
- Next : 새로운 항목이 방출될 때 마다, Next클로저 호출 이때, 방출된 항목은 클로저의 파라미터로 받는다.
- Completed : 이벤트가 종료되었을 때, 옵저버에게 이벤트가 종료되었음을 알리기위해, 호출된다.
- Error : Observable이 기대하는 데이터가 생성되지 않거나, 다른 이유로 오류가 발생했을 때, 옵저버에게 알리기 위해 호출된다.
Observable 생성
- Observable를 생성한다는 것은 시퀀스를 생성한다는 것과 동일한 의미이다. 그렇다면 시퀀스에는 무엇이 있는가?
- 이벤트들이 있다.
Observable<Int>.create{ (observer) -> Disposable in
observer.on(.next(0))
observer.onNext(1)
observer.onCompleted()
return Disposables.create()
}
이벤트를 전달하지는 않는다. 위 코드는 단순히 옵저버블을 생성한 상태
이벤트가 전달되는 시점은 Observer가 구독하는 시점이다.
Observer 구독
Observable 그 자체는 어떠한 작업도 할 수 없다. Observable을 구독하는 것은 next() 이벤트를 Iterator처럼 호출하는 것이다.
let ob = Observable<Int>.create { (observer) -> Disposable in
observer.on(.next(0))
observer.onNext(1)
observer.onCompleted()
return Disposables.create()
}
ob.subscribe(onNext: {
elem in
print(elem)
}, onCompleted: {
print("완료")
})
infaillible
- 절대 보증할 수 있는, 결코 틀리지 않는, 절대 옳은 사전적 의미이다. (무언가 대단해보이구만)
- 다른 형태의 Observable이다.
- Next 와 Completed 만 방출하고, Error는 방출 하지 않음을 보장
let inf = Infallible<String>.create { observer in
observer(.next("hello!"))
observer(.completed)
return Disposables.create()
}
반응형