2

私のアプリでは、すべてのネットワーク要求と応答にMoyaAlamofire (および Moya/RxSwift とMoya-ObjectMapper ) ライブラリを使用しています。

1 つのハンドラーですべてのタイプの要求の応答を処理したいだけでなく、すべての要求を一意に処理したいと考えています。

たとえば、「無効なバージョン」という応答を受け取る可能性のある要求に対して、このエラーが発生した場合にすべての応答をチェックインすることは避けたいと思います。

でこのユースケースを処理するエレガントな方法はありMoyaますか?

4

2 に答える 2

4

どうやらそれは非常に簡単です。独自のプラグインを作成するだけです。それを Provider インスタンスに追加します (init 関数で追加できます)。

例えば:

struct NetworkErrorsPlugin: PluginType {

    /// Called immediately before a request is sent over the network (or stubbed).
    func willSendRequest(request: RequestType, target: TargetType) { }

    /// Called after a response has been received, but before the MoyaProvider has invoked its completion handler.
    func didReceiveResponse(result: Result<Moya.Response, Moya.Error>, target: TargetType) {

        let responseJSON: AnyObject
        if let response = result.value {
            do {
                responseJSON = try response.mapJSON()
                if let response = Mapper<GeneralServerResponse>().map(responseJSON) {
                    switch response.status {
                    case .Failure(let cause):
                        if cause == "Not valid Version" {
                            print("Version Error")
                        }
                    default:
                        break
                    }
                }
            } catch {
                print("Falure to prase json response")
            }
        } else {
            print("Network Error = \(result.error)")
        }
    }
}
于 2016-01-12T07:49:22.223 に答える