이니셜라이저는 두 개의 인자를 받는다.
예를 들어 특정 네트워크 요청이 성공할 때까지 다시 요청하려 한다면 이 동작을 사용할 수 있다.
// Publishers.Retry Publisher
Publishers.Retry(upstream: Fail<Void, Error>(error: error), retries: 2)
.sink(receiveCompletion: { completion in
switch completion {
case .failure:
print("Combine Retry Error")
case .finished:
print("Combine Retry Finish")
}
}, receiveValue: { value in
print("Combine Retry : \(value)")
})
.store(in: &cancellables)
// retry Operator
Fail<Void, Error>(error: error)
.retry(2)
.sink(receiveCompletion: { completion in
switch completion {
case .failure:
print("Combine Retry Error")
case .finished:
print("Combine Retry Finish")
}
}, receiveValue: { value in
print("Combine Retry : \(value)")
})
.store(in: &cancellables)
// Combine Retry Error
그러므로 첫 구독에서 에러가 내려오게 되고, 이후 두 번 재시도한다.
두 번의 재시도에도 불구하고 에러가 내려오므로 결과적으로 에러를 낸다.
Observable<Void>.error(error)
.retry(2)
.subscribe(onNext: { value in
print("RxSwift Retry : \(value)")
}, onError: { _ in
print("RxSwift Retry Error")
}, onCompleted: {
print("RxSwift Retry Finish")
})
.disposed(by: disposeBag)
// RxSwift Retry Error
SignalProducer<Void, Error>(error: error)
.retry(upTo: 2)
.start { event in
switch event {
case let .value(value):
print("ReactiveSwift Retry : \(value)")
case .failed:
print("ReactiveSwift Retry Error")
case .completed:
print("ReactiveSwift Retry Finish")
default:
break
}
}
// ReactiveSwift Retry Error