Publishers.Print

์ œ๋„ค๋ฆญ ๊ตฌ์กฐ์ฒด | ๋ฐœํ–‰ํ•˜๋Š” ๋ชจ๋“  ์ด๋ฒคํŠธ์— ๋Œ€ํ•˜์—ฌ, ์„ ํƒ์ ์œผ๋กœ ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ๋Š” ๋กœ๊ทธ ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋Š” Publisher

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

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

  • prefix : ๋กœ๊ทธ ๋ฉ”์„ธ์ง€์˜ ์•ž์— ๋ถ™์ผ ๋ฌธ์ž์—ด

  • to : ํ…์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•  ๊ณณ. nil์ด๋ฉด ํ‘œ์ค€ ์ถœ๋ ฅ์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

์ด๋ฒคํŠธ์— ๋Œ€ํ•˜์—ฌ ๋กœ๊ทธ ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๋‹ค์Œ์˜ ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌ๋ฐ›์œผ๋ฉด ๋กœ๊ทธ ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

  • ๊ตฌ๋…Subscription

  • ๊ฐ’Value

  • ์ •์ƒ ์ข…๋ฃŒNormal Completion

  • ์‹คํŒจFailure

  • ์ทจ์†ŒCancellation

๋งค ์˜คํผ๋ ˆ์ดํ„ฐ ์‹คํ–‰ ํ›„ Publisher์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋Š” ๋“ฑ ๋””๋ฒ„๊น… ๊ณผ์ •์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

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

// Publishers.Print Publisher
Publishers
  .Print(upstream: Just(Void()), prefix: "")
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine Print Error")
    case .finished:
      print("Combine Print Finish")
    }
  }, receiveValue: {
    print("Combine Print")
  })
  .store(in: &cancellables)

// print Operator
Just(Void())
  .print()
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine Print Error")
    case .finished:
      print("Combine Print Finish")
    }
  }, receiveValue: {
    print("Combine Print")
  })
  .store(in: &cancellables)

// receive subscription: (Just)
// request unlimited
// receive value: (())
// Combine Print
// receive finished
// Combine Print Finish

prefix์— ์‹คํ–‰ ์‹œ๊ฐ / ํŒŒ์ผ, ๋ผ์ธ, ํ•จ์ˆ˜ ์ด๋ฆ„ ์ •๋ณด ๋“ฑ์„ ๋‹ด์œผ๋ฉด ๋”์šฑ ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์ข‹์„ ๊ฒƒ์ด๋‹ค.

RxSwift

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

Observable.just(Void())
  .debug()
  .subscribe(onNext: {
    print("RxSwift Print")
  }, onError: { _ in
    print("RxSwift Print Error")
  }, onCompleted: {
    print("RxSwift Print Finish")
  })
  .disposed(by: disposeBag)

// 2019-10-29 22:11:20.753: ContentViewModel.swift:57 (rxSwift()) -> subscribed
// 2019-10-29 22:11:20.755: ContentViewModel.swift:57 (rxSwift()) -> Event next(())
// RxSwift Print
// 2019-10-29 22:11:20.755: ContentViewModel.swift:57 (rxSwift()) -> Event completed
// RxSwift Print Finish
// 2019-10-29 22:11:20.755: ContentViewModel.swift:57 (rxSwift()) -> isDisposed

ReactiveSwift

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

SignalProducer(value: Void())
  .logEvents()
  .start { event in
    switch event {
    case .value:
      print("ReactiveSwift Print")
    case .failed:
      print("ReactiveSwift Print Error")
    case .completed:
      print("ReactiveSwift Print Finish")
    default:
      break
    }
  }

// [] starting fileName: /Users/presto/Developer/Xcode/ReactivePractice/ReactivePractice/ContentViewModel.swift, functionName: reactiveSwift(), lineNumber: 71
// [] value fileName: /Users/presto/Developer/Xcode/ReactivePractice/ReactivePractice/ContentViewModel.swift, functionName: reactiveSwift(), lineNumber: 71
// ReactiveSwift Print
// [] completed fileName: /Users/presto/Developer/Xcode/ReactivePractice/ReactivePractice/ContentViewModel.swift, functionName: reactiveSwift(), lineNumber: 71
// [] terminated fileName: /Users/presto/Developer/Xcode/ReactivePractice/ReactivePractice/ContentViewModel.swift, functionName: reactiveSwift(), lineNumber: 71
// ReactiveSwift Print Finish
// [] disposed fileName: /Users/presto/Developer/Xcode/ReactivePractice/ReactivePractice/ContentViewModel.swift, functionName: reactiveSwift(), lineNumber: 71
// [] started fileName: /Users/presto/Developer/Xcode/ReactivePractice/ReactivePractice/ContentViewModel.swift, functionName: reactiveSwift(), lineNumber: 71

Last updated

Was this helpful?