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 ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

ReactiveSwift

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

์ฐธ๊ณ 

ReactiveX - Operators - Do

Last updated

Was this helpful?