Publishers.Breakpoint

์ œ๋„ค๋ฆญ ๊ตฌ์กฐ์ฒด | ์ œ๊ณต๋œ ํด๋กœ์ €๊ฐ€ ๋””๋ฒ„๊ฑฐ์—์„œ ๊ทธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘๋‹จํ•˜๋Š” ๊ฒƒ์„ ํ•„์š”๋กœ ํ•  ๋•Œ ๋””๋ฒ„๊ฑฐ ์‹œ๊ทธ๋„์„ ์ผ์œผํ‚ค๋Š” Publisher

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

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

  • receiveSubscription : Publisher๊ฐ€ ๊ตฌ๋…์„ ์ „๋‹ฌ๋ฐ›์„ ๋•Œ ์‹คํ–‰๋˜๋ฉฐ, true ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋””๋ฒ„๊ฑฐ ์‹œ๊ทธ๋„์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํด๋กœ์ €

  • receiveOutput : Publisher๊ฐ€ ์ƒ์œ„ Publisher๋กœ๋ถ€ํ„ฐ ์ถœ๋ ฅ์„ ์ „๋‹ฌ๋ฐ›์„ ๋•Œ ์‹คํ–‰๋˜๋ฉฐ, true ๊ฐ’์‡ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋””๋ฒ„๊ฑฐ ์‹œ๊ทธ๋„์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํด๋กœ์ €

  • receiveCompletion : Publisher๊ฐ€ ์™„๋ฃŒ๋ฅผ ์ „๋‹ฌ๋ฐ›์„ ๋•Œ ์‹คํ–‰๋˜๋ฉฐ, true ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋””๋ฒ„๊ฑฐ ์‹œ๊ทธ๋„์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํด๋กœ์ €

handleEvents์™€ ๊ฐ™์€ ์‹œ์ ์— ๋™์ž‘ํ•˜๋‚˜ ํด๋กœ์ €๊ฐ€ true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•˜๋ฉด ํ•ด๋‹น ์ด๋ฒคํŠธ ์‹œ์ ์—์„œ ๋””๋ฒ„๊ฑฐ ์‹œ๊ทธ๋„์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

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

// 1. Publishers.Breakpoint Publisher
Publishers.Breakpoint(upstream: Just(Void()),
                          receiveSubscription: { _ in true },
                          receiveOutput: { _ in true },
                          receiveCompletion: { _ in true })
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine Breakpoint Error")
    case .finished:
      print("Combine Breakpoint Finish")
    }
  }, receiveValue: {
    print("Combine Breakpoint")
  })
  .store(in: &cancellables)

// 2. breakpoint Operator
Just(Void())
  .breakpoint(receiveSubscription: { _ in true },
              receiveOutput: { _ in true },
              receiveCompletion: { _ in true })
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine Breakpoint Error")
    case .finished:
      print("Combine Breakpoint Finish")
    }
  }, receiveValue: {
    print("Combine Breakpoint")
  })
  .store(in: &cancellables)

// 3. breakpointOnError Operator
Fail<Void, Error>(error: error)
  .breakpointOnError()
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine Breakpoint Error")
    case .finished:
      print("Combine Breakpoint Finish")
    }
  }, receiveValue: {
    print("Combine Breakpoint")
  })
  .store(in: &cancellables)

1๊ณผ 2์˜ ์ฝ”๋“œ๋Š” ๊ตฌ๋…, ๊ฐ’ ๋ฐœํ–‰, ์™„๋ฃŒ ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚  ๋•Œ ๋””๋ฒ„๊ฑฐ ์‹œ๊ทธ๋„์„ ์ผ์œผํ‚จ๋‹ค.

3์˜ ์ฝ”๋“œ๋Š” ์ƒ์œ„ Publisher๊ฐ€ ์—๋Ÿฌ๋ฅผ ๋‚ด๋ฏ€๋กœ breakpointOnError์— ์˜ํ•ด ๋””๋ฒ„๊ฑฐ ์‹œ๊ทธ๋„์„ ์ผ์œผํ‚จ๋‹ค.

RxSwift

ํ•ด๋‹น ๋™์ž‘์„ ๊ตฌํ˜„ํ•˜๋Š” ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

ReactiveSwift

ํ•ด๋‹น ๋™์ž‘์„ ๊ตฌํ˜„ํ•˜๋Š” ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

Last updated

Was this helpful?