본문 바로가기
iOS/RxSwift

[RxSwift] Observable

by 최지철 2023. 9. 14.
728x90
반응형

        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()
         }
728x90
반응형

'iOS > RxSwift' 카테고리의 다른 글

[RxSwift] Create Operators [1]  (0) 2023.10.29
[RxSwift] Relay  (1) 2023.10.29
[RxSwift] Subject  (0) 2023.10.29
[RxSwift] Disposable  (0) 2023.09.14
[RxSwift] ReactiveX, RxSwift 왜 써야할까?  (0) 2023.08.30