이니셜라이저는 두 개의 인자를 받는다.
에러를 변환하기 위해 사용한다. 에러를 처리하는 것이 아니므로 상위에 흐르는 Publisher가 에러를 내고 별도의 에러 처리 작업이 없다면 에러를 내며 종료하게 된다.
// 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가 에러를 내므로 결과적으로 에러를 내며 종료한다.
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
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
}
}