Publishers.SetFailureType

μ œλ„€λ¦­ ꡬ쑰체 | νŠΉμ • μ‹€νŒ¨ νƒ€μž…μ„ μ „λ‹¬ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ” Publisher

μ΄λ‹ˆμ…œλΌμ΄μ €λŠ” ν•œ 개의 인자λ₯Ό λ°›λŠ”λ‹€.

  • upstream : μƒμœ„μ— 흐λ₯΄λŠ” Publisher

μƒμœ„ Publisher의 μ—λŸ¬ νƒ€μž…μ€ Never이며, ν•΄λ‹Ή Publisher의 μ—λŸ¬ νƒ€μž…μ€ Error ν”„λ‘œν† μ½œμ„ 채택해야 ν•œλ‹€.

μ΄λŠ” μ‹€μ œλ‘œ νŠΉμ • νƒ€μž…μ˜ μ—λŸ¬λ₯Ό λ‚΄μ§€λŠ” μ•Šκ³  μ •μƒμ μœΌλ‘œ μ’…λ£Œν•˜μ§€λ§Œ, λ‹€λ₯Έ μ—λŸ¬ νƒ€μž…μ΄ λ§žμ§€ μ•ŠλŠ” Publisher와 ν•¨κ»˜ λ™μž‘ν•˜κΈ° μœ„ν•΄ μ—λŸ¬μ˜ νƒ€μž…μ„ μΌμΉ˜μ‹œν‚€κΈ° μœ„ν•΄ μ‚¬μš©ν•  수 μžˆλ‹€.

예λ₯Ό λ“€μ–΄ 1번 Publisherκ°€ μ—λŸ¬λ₯Ό λ‚΄μ§€ μ•Šκ³  (μ—λŸ¬μ˜ νƒ€μž…μ΄ Never) 2번 Publisherκ°€ μ—λŸ¬λ₯Ό λ‚΄λŠ”λ° 두 개의 Publisherλ₯Ό μ‘°ν•©ν•΄μ•Ό ν•œλ‹€λ©΄ 1번 Publisherκ°€ 2번 Publisher의 μ—λŸ¬ νƒ€μž…μ˜ μ—λŸ¬λ₯Ό λ‚΄λŠ” κ²ƒμ²˜λŸΌ ν–‰λ™ν•˜λ„λ‘ ν•˜μ—¬ νƒ€μž…μ„ λ§žμΆ”μ–΄ μ£Όμ–΄μ•Ό ν•  ν•„μš”κ°€ μžˆμ„ 것이닀.

이 λ•Œ ν•΄λ‹Ή Publisherλ₯Ό μ‚¬μš©ν•˜μ—¬ μ‹€μ œλ‘œ νŠΉμ • νƒ€μž…μ˜ μ—λŸ¬λ₯Ό λ‚΄μ§€λŠ” μ•Šμ§€λ§Œ μ—λŸ¬μ˜ νƒ€μž…μ„ λ§žμΆ°μ€„ 수 μžˆλ‹€.

setFailureType μ˜€νΌλ ˆμ΄ν„°μ™€ 관련이 μžˆλ‹€.

// Publishers.SetFailureType Publisher
Just(Void())
  .setFailureType(to: Error.self)
  .combineLatest(Fail<Void, Error>(error: error))
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine SetFailureType Error")
    case .finished:
      print("Combine SetFailureType Finish")
    }
  }, receiveValue: { _ in
    print("Combine SetFailureType")
  })
  .store(in: &cancellables)

// setFailureType Operator
Publishers.SetFailureType<Just<Void>, Error>(upstream: Just(Void()))
  .combineLatest(Fail<Void, Error>(error: error))
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine SetFailureType Error")
    case .finished:
      print("Combine SetFailureType Finish")
    }
  }, receiveValue: { _ in
    print("Combine SetFailureType")
  })
  .store(in: &cancellables)

// Combine SetFailureType Error

Just PublisherλŠ” μ—λŸ¬λ₯Ό λ‚΄μ§€ μ•ŠλŠ” Publisherμ΄μ§€λ§Œ Fail Publisher와 μ‘°ν•©ν•˜κΈ° μœ„ν•΄ Fail Publisher의 μ—λŸ¬ νƒ€μž…μΈ Error νƒ€μž…μ˜ μ—λŸ¬λ‘œ νƒ€μž…μ„ λ§žμΆ”κΈ° μœ„ν•΄ setFailureType이 μš”κ΅¬ν•˜λŠ” μ—λŸ¬μ˜ νƒ€μž…μ— Error.selfλ₯Ό λͺ…μ‹œν•΄ μ£Όμ—ˆλ‹€.

이λ₯Ό 톡해 Just Publisher와 Fail PublisherλŠ” 쑰합이 κ°€λŠ₯ν•˜κ²Œ λ˜μ—ˆλ‹€.

μ½”λ“œ μ‹€ν–‰ 결과둜, Fail Publisherκ°€ λ‚΄λŠ” μ—λŸ¬κ°€ μ²˜λ¦¬λ˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— μ‘°ν•©λœ PublisherλŠ” μ—λŸ¬λ₯Ό λ‚΄κ²Œ λœλ‹€.

RxSwift

Observable이 μ—λŸ¬μ˜ νƒ€μž…μ„ μš”κ΅¬ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ μ΄λŸ¬ν•œ λ™μž‘μ„ κ΅¬ν˜„ν•  ν•„μš”κ°€ μ—†κ³ , κ΅¬ν˜„λ˜μ–΄ μžˆμ§€λ„ μ•Šλ‹€.

ReactiveSwift

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

Last updated