Publishers.MapError

์ œ๋„ค๋ฆญ ๊ตฌ์กฐ์ฒด | ์ƒ์œ„์— ํ๋ฅด๋Š” Publisher์˜ ์–ด๋– ํ•œ ์‹คํŒจ๋ฅผ ์ƒˆ๋กœ์šด ์—๋Ÿฌ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” Publisher

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

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

  • transform : ์ƒ์œ„์— ํ๋ฅด๋Š” Publisher์˜ ์‹คํŒจ๋ฅผ ์ƒˆ๋กœ์šด ์—๋Ÿฌ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํด๋กœ์ €

upstream Publisher์˜ ์—๋Ÿฌ ํƒ€์ž…์€ Error๋‹ค.

์—๋Ÿฌ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ ์ƒ์œ„์— ํ๋ฅด๋Š” Publisher๊ฐ€ ์—๋Ÿฌ๋ฅผ ๋‚ด๊ณ  ๋ณ„๋„์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ์ž‘์—…์ด ์—†๋‹ค๋ฉด ์—๋Ÿฌ๋ฅผ ๋‚ด๋ฉฐ ์ข…๋ฃŒํ•˜๊ฒŒ ๋œ๋‹ค.

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

// Publishers.MapError Publisher
Publishers.MapError(upstream: Fail<Void, NSError>(error: error), { $0 as Error })
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine MapError Error")
    case .finished:
      print("Combine MapError Finish")
    }
  }, receiveValue: {
    print("Combine MapError")
  })
  .store(in: &cancellables)

// mapError Operator
Fail(error: error)
  .mapError { $0 as Error }
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine MapError Error")
    case .finished:
      print("Combine MapError Finish")
    }
  }, receiveValue: {
    print("Combine MapError")
  })
  .store(in: &cancellables)

// Combine MapError Error

๋‘ ์ฝ”๋“œ ๋ชจ๋‘ ์ƒ์œ„ Publisher๋กœ NSError ๊ฐ์ฒด๋ฅผ ๋ฐ›๋Š” Fail Publisher๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

$0 as Error๋ฅผ ํ†ตํ•ด NSError ํƒ€์ž…์ด Error ํƒ€์ž…์œผ๋กœ ๋งคํ•‘๋œ๋‹ค.

์ƒ์œ„์— ํ๋ฅด๋Š” Publisher๊ฐ€ ์—๋Ÿฌ๋ฅผ ๋‚ด๋ฏ€๋กœ ๊ฒฐ๊ณผ์ ์œผ๋กœ ์—๋Ÿฌ๋ฅผ ๋‚ด๋ฉฐ ์ข…๋ฃŒํ•œ๋‹ค.

RxSwift

๋‚ด๋ถ€์ ์œผ๋กœ ์—๋Ÿฌ์˜ ํƒ€์ž…์œผ๋กœ Error๋ฅผ ๋…ธ์ถœํ•˜๋ฏ€๋กœ mapError์™€ ๊ฐ™์ด ์—๋Ÿฌ์˜ ํƒ€์ž…์„ ๋ณ€ํ™˜ํ•˜๋Š” ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

Observable<Void>.error(error)
  .subscribe(onNext: {
    print("RxSwift MapError")
  }, onError: { _ in
    print("RxSwift MapError Error")
  }, onCompleted: {
    print("RxSwift MapError Finish")
  })
  .disposed(by: disposeBag)

// RxSwift MapError Error

ReactiveSwift

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

SignalProducer<Void, NSError>(error: error)
  .mapError { $0 as Error }
  .start { event in
    switch event {
    case .value:
      print("ReactiveSwift MapError")
    case .failed:
      print("ReactiveSwift MapError Error")
    case .completed:
      print("ReactiveSwift MapError Finish")
    default:
      break
    }
  }

Last updated

Was this helpful?