RxSwift еще один вопрос об обработке ошибок:
Я использую Alamofire + RxAlamofire следующим образом:
SessionManager.default.rx.responseJSON(.post, url, parameters:params)
пример:
func login() -> Observable<Int> {
let urlString = ...
let params = ...
return SessionManager.default.rx.responseJSON(.post, url, parameters:params)
.rxJsonDefaultResponse()
.map({ (data) in
data["clientId"] as! Int
})
}
....
extension ObservableType where Element == (HTTPURLResponse, Any) {
func rxJsonDefaultResponse() -> Observable<Dictionary<String, Any>> {
return self.asObservable().map { data -> Dictionary<String, Any> in
if... //error chechings
throw NSError(domain: ..,
code: ...,
userInfo: ...)
}
...
return json
}
}
}
используя:
loginBtn.rx.tap
.flatMap{ _ in
provider.login()
}.subscribe(onNext: { id in
...
}, onError: { (er) in
ErrorPresentationHelper.showErrorAlert(for: er)
})
.disposed(by: bag)
Таким образом, если произошла ошибка, все работает, как задумано: предупреждение об ошибке показывает и 'loginBtn.rx.tap' удален, но мне нужно, чтобы он был еще жив, какова моя стратегия, если я хочу использовать блок onError