Publishers.HandleEvents

์ œ๋„ค๋ฆญ ๊ตฌ์กฐ์ฒด | Publisher์˜ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ํŠน์ • ํด๋กœ์ €๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” Publisher

์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ์—ฌ์„ฏ ๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›๋Š”๋‹ค.

  • upstream : ์ƒ์œ„์— ํ๋ฅด๋Š” Publisher

  • receiveSubscription : Publisher๊ฐ€ ์ƒ์œ„ Publisher๋กœ๋ถ€ํ„ฐ ๊ตฌ๋…์„ ์ „๋‹ฌ๋ฐ›์„ ๋•Œ ์ˆ˜ํ–‰ํ•  ํด๋กœ์ €. ๊ธฐ๋ณธ๊ฐ’์€ nil

  • receiveOutput : Publisher๊ฐ€ ์ƒ์œ„ Publisher๋กœ๋ถ€ํ„ฐ ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›์„ ๋•Œ ์ˆ˜ํ–‰ํ•  ํด๋กœ์ €. ๊ธฐ๋ณธ๊ฐ’์€ nil

  • receiveCompletion : Publisher๊ฐ€ ์ƒ์œ„ Publisher๋กœ๋ถ€ํ„ฐ ์™„๋ฃŒ๋ฅผ ์ „๋‹ฌ๋ฐ›์„ ๋•Œ ์ˆ˜ํ–‰ํ•  ํด๋กœ์ €. ๊ธฐ๋ณธ๊ฐ’์€ nil

  • receiveCancel : ํ•˜์œ„ ๋ฆฌ์‹œ๋ฒ„๊ฐ€ ๋ฐœํ–‰์„ ์ทจ์†Œํ•  ๋•Œ ์ˆ˜ํ–‰ํ•  ํด๋กœ์ €. ๊ธฐ๋ณธ๊ฐ’์€ nil

  • receiveRequest : Publisher๊ฐ€ ๋” ๋งŽ์€ ์š”์†Œ๋ฅผ ์œ„ํ•ด ์š”์ฒญ์„ ์ „๋‹ฌ๋ฐ›์„ ๋•Œ ์ˆ˜ํ–‰ํ•  ํด๋กœ์ €. ๊ธฐ๋ณธ๊ฐ’์€ nil

์ŠคํŠธ๋ฆผ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ ๋™์•ˆ ๋ฐœ์ƒํ•˜๋Š” ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ์—์„œ ์‹คํ–‰ํ•  ์•ก์…˜์„ ๋“ฑ๋กํ•œ๋‹ค.

ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Publisher์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

sink๋Š” Subscriber์— ๋Œ€ํ•œ ์˜คํผ๋ ˆ์ดํ„ฐ๊ณ , handleEvents๋Š” Publisher์— ๋Œ€ํ•œ ์˜คํผ๋ ˆ์ดํ„ฐ๋‹ค.

  • sink๋Š” Subscriber์˜ ๊ตฌ๋…์— ์˜ํ•ด ์ตœ์ข…์ ์œผ๋กœ ๋ฐœํ–‰๋œ ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ๋™์ž‘ํ•œ๋‹ค.

  • handleEvents๋Š” ๊ตฌ๋…์— ์˜ํ•ด ์ƒ์œ„ Publisher๊ฐ€ ๋ฐœํ–‰ํ•˜๋Š” ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ๋™์ž‘ํ•œ๋‹ค.

handleEvents ์˜คํผ๋ ˆ์ดํ„ฐ์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค.

// Publishers.HandleEvents Publisher
Publishers
  .HandleEvents(upstream: Just(Void()),
                receiveSubscription: { _ in print("Combine HandleEvents ReceiveSubscription") },
                receiveOutput: { print("Combine HandleEvents ReceiveOutput") },
                receiveCompletion: { _ in print("Combine HandleEvents ReceiveCompletion") },
                receiveCancel: { print("Combine HandleEvents ReceiveCancel") },
                receiveRequest: { _ in print("Combine HandleEvents ReceiveRequest") })
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine HandleEvents Error")
    case .finished:
      print("Combine HandleEvents Finish")
    }
  }, receiveValue: {
    print("Combine HandleEvents")
  })
  .store(in: &cancellables)

// handleEvents Operator
Just(Void())
  .handleEvents(receiveSubscription: { _ in print("Combine HandleEvents ReceiveSubscription") },
                receiveOutput: { print("Combine HandleEvents ReceiveOutput") },
                receiveCompletion: { _ in print("Combine HandleEvents ReceiveCompletion") },
                receiveCancel: { print("Combine HandleEvents ReceiveCancel") },
                receiveRequest: { _ in print("Combine HandleEvents ReceiveRequest") })
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine HandleEvents Error")
    case .finished:
      print("Combine HandleEvents Finish")
    }
  }, receiveValue: {
    print("Combine HandleEvents")
  })
  .store(in: &cancellables)

// Combine HandleEvents Receive Request
// Combine HandleEvents Receive Subscription
// Combine HandleEvents Receive Output
// Combine HandleEvents
// Combine HandleEvents Receive Completion
// Combine HandleEvents Finish

๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด Publisher๋Š” ์—๋Ÿฌ๋ฅผ ๋‚ด์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ๋™์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  1. Publisher : Receive Request

  2. Publisher : Receive Subscription

  3. Publisher : Receive Output

  4. Subscriber : Receive Value

  5. Publisher : Receive Completion

  6. Subscriber : Receive Finished

RxSwift

do ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

Observable.just(Void())
  .do(onNext: { print("RxSwift HandleEvents OnNext") },
      afterNext: { print("RxSwift HandleEvents AfterNext") },
      onError: { _ in print("RxSwift HandleEvents OnError") },
      afterError: { _ in print("RxSwift HandleEvents AfterError") },
      onCompleted: { print("RxSwift HandleEvents OnCompleted") },
      afterCompleted: { print("RxSwift HandleEvents AfterCompleted") },
      onSubscribe: { print("RxSwift HandleEvents OnSubscribe") },
      onSubscribed: { print("RxSwift HandleEvents OnSubscribed") },
      onDispose: { print("RxSwift HandleEvents OnDispose") })
  .subscribe(onNext: {
    print("RxSwift HandleEvents")
  }, onError: { _ in
    print("RxSwift HandleEvents Error")
  }, onCompleted: {
    print("RxSwift HandleEvents Finish")
  })
  .disposed(by: disposeBag)

// RxSwift HandleEvents OnSubscribe
// RxSwift HandleEvents OnNext
// RxSwift HandleEvents
// RxSwift HandleEvents AfterNext
// RxSwift HandleEvents OnCompleted
// RxSwift HandleEvents Finish
// RxSwift HandleEvents AfterCompleted
// RxSwift HandleEvents OnSubscribed
// RxSwift HandleEvents OnDispose

ReactiveSwift

on ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

SignalProducer(value: Void())
  .on(starting: { print("ReactiveSwift HandleEvents Starting") },
      started: { print("ReactiveSwift HandleEvents Started") },
      event: { _ in print("ReactiveSwift HandleEvents Event") },
      failed: { _ in print("ReactiveSwift HandleEvents Failed") },
      completed: { print("ReactiveSwift HandleEvents Completed") },
      interrupted: { print("ReactiveSwift HandleEvents Interrupted") },
      terminated: { print("ReactiveSwift HandleEvents Terminated") },
      disposed: { print("ReactiveSwift HandleEvents Dispose") },
      value: { print("ReactiveSwift HandleEvents Value") })
  .start { event in
    switch event {
    case .value:
      print("ReactiveSwift HandleEvents")
    case .failed:
      print("ReactiveSwift HandleEvents Error")
    case .completed:
      print("ReactiveSwift HandleEvents Finish")
    default:
      break
    }
  }

// ReactiveSwift HandleEvents Starting
// ReactiveSwift HandleEvents Event
// ReactiveSwift HandleEvents Value
// ReactiveSwift HandleEvents
// ReactiveSwift HandleEvents Event
// ReactiveSwift HandleEvents Completed
// ReactiveSwift HandleEvents Terminated
// ReactiveSwift HandleEvents Finish
// ReactiveSwift HandleEvents Dispose
// ReactiveSwift HandleEvents Started

์ฐธ๊ณ 

ReactiveX - Operators - Do

Last updated

Was this helpful?