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와 같이 μ—λŸ¬μ˜ νƒ€μž…μ„ λ³€ν™˜ν•˜λŠ” μ˜€νΌλ ˆμ΄ν„°λ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€.

ReactiveSwift

mapError μ˜€νΌλ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•  수 μžˆλ‹€.

Last updated