私は RxMoya を使用しており、fiterSuccesfulStatusCodes の使用法について疑問に思っていました。私の問題が何であるかを説明しようと思います...だから、このようなネットワーク呼び出しを使用すると
func getAllApps(gwId: Int) -> Observable<Response> {
return provider.request(RestAPI.GetAllApps(gwId: gwId)).filterSuccessfulStatusCodes()
}
299 を超えるステータス コードで応答を受け取っても何も起こりません。私の問題は、ユーザーにエラー メッセージを表示したいということですが、filterSuccessfulStatusCodes の機能を調べると、次のようになります。
public func filterSuccessfulStatusCodes() -> Observable<E> {
return flatMap { response -> Observable<E> in
return Observable.just(try response.filterSuccessfulStatusCodes())
}
}
今、私たちは私が抱えている問題に近づいています。したがって、filterSuccessfulStatusCodes の実装は、この実装で Moya.Resposne のパブリック インスタンス関数を使用します。
public func filterSuccessfulStatusCodes() throws -> Response {
return try filterStatusCodes(200...299)
}
ご覧のとおり、これは例外をスローします...しかし、上記の関数は再スローせず、ジェネリック型 E の Observable を返します。
私の最初の質問は、関数がスロー/再スローしない場合に return Observable.just(try response.filterSuccessfulStatusCodes()) を使用できるのはなぜですか。do/chatch? なしで try を使用できます (try!/try? を使用できることはわかっていますが、try を使用すると、rethrow を使用する場合しか想像できません)。
2 番目の質問です。オブザーバブルのレベルで、エラー ステータス コードに対応する方法があります。
ありがとうございました