Combine + Alamofire Error応答からデータ値を取得するにはどうすればよいですか?

ヒョウヌソン

以下はapiを呼び出すための私のコードであり、api呼び出しにエラーがあるとSwift.Errorを返します。

AccountAPI.postAccount(withSignUpCommand: signUpCommand)
            .sink(receiveCompletion: { [weak self] result in
                guard let self = self else { return }

                switch result {
                    case .finished:
                        self.logger.debug("signUp completed.")
                    case .failure(let error):
                        self.isAuthenticating = false
                        self.logger.error("signUp error : \(error)")
                }
            }, receiveValue: { [weak self] (statusCode, userId) in
                guard let self = self else { return }

                self.logger.debug("signUp status code : \(statusCode)")

                guard (200...299).contains(statusCode) else {
                    return
                }

                self.logger.debug("UserId: \(userId)")
            })
            .store(in: &disposables)

そして私の出版社はここに

static func postAccount(
        withSignUpCommand signUpCommand: SignUpCommand,
        apiResponseQueue: DispatchQueue = CloudHospitalClientAPI.apiResponseQueue
    ) -> AnyPublisher<(Int, String), Error> {
        let url = "\(CloudHospitalClientAPI.identityBasePath)/api/v1/accounts"

        let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: signUpCommand)

        return Future<(Int, String), Error>.init { promise in
            postAccountWithRequestBuilder(withURLString: url, withParameters: parameters, isBody: true).execute(apiResponseQueue) { result -> Void in
                switch result {
                    case let .success(response):
                        promise(.success((response.statusCode, response.body!)))
                    case let .failure(error):
                        promise(.failure(error))
                }
            }
        }
        .eraseToAnyPublisher()

    }

    static func postAccountWithRequestBuilder(
        withURLString URLString: String,
        withParameters parameters: [String: Any]?,
        isBody: Bool
    ) -> RequestBuilder<String> {

        let url = URLComponents(string: URLString)
        let requestBuilder: RequestBuilder<String>.Type = CloudHospitalClientAPI.requestBuilderFactory.getBuilder()

        return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, isBody: isBody)
    }

これをデバッグすると、以下の結果が得られます。 デバッグ

以下の形式のAPIエラー応答。このデータを解析したいのですが、この値にまったくアクセスできません。 api(swagger)からのエラー応答

戻り値の型をカスタムエラー応答に変更しようとしましたが、うまくいきませんでした。

デコードエラー応答コードを挿入して呼び出し元関数に戻ることができるアドバイスを共有してください。

前もって感謝します。

ブルーノのおかげで、以下は私の編集したコードです。

        AccountAPI.postAccount(withSignUpCommand: signUpCommand)
            .sink(receiveCompletion: { [weak self] result in
                guard let self = self else { return }

                switch result {
                    case .finished:
                        self.logger.debug("signUp completed.")
                    case .failure(let error):
                        self.isAuthenticating = false
                        self.logger.error("signUp error : \(error)")
                        if case let ErrorResponse.error(_, data, _) = error {
                            let decoder = JSONDecoder()
                            let identityErrors = try! decoder.decode([IdentityError].self, from: data!)

                            // TODO: Decode `data` here...
                            self.logger.debug("data: \(String(describing: identityErrors))")

                            self.errors = identityErrors
                        }
                }
            }, receiveValue: { [weak self] (statusCode, userId) in
                guard let self = self else { return }

                self.logger.debug("signUp status code : \(statusCode)")

                guard (200...299).contains(statusCode) else {
                    return
                }

                self.logger.debug("UserId: \(userId)")
            })
            .store(in: &disposables)
ブルーノ・コエーリョ

これで問題が解決するかどうか確認していただけますか?

AccountAPI.postAccount(withSignUpCommand: signUpCommand)
        .sink(receiveCompletion: { [weak self] result in
            guard let self = self else { return }

            switch result {
                case .finished:
                    self.logger.debug("signUp completed.")
                case .failure(let error):
                    self.isAuthenticating = false
                    self.logger.error("signUp error : \(error)")

                    if case let ErrorResponse.error(statusCode, data, error) = error {

                        // TODO: Decode `data` here...
                        
                    }
            }
        }, receiveValue: { [weak self] (statusCode, userId) in
            guard let self = self else { return }

            self.logger.debug("signUp status code : \(statusCode)")
        })
        .store(in: &disposables)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

iOS Swiftでalamofireを使用してjson応答を取得するにはどうすればよいですか?

分類Dev

Alamofire + Combine:HTTP応答ステータスコードを取得します

分類Dev

Swift4のAlamofireからデータを解析するにはどうすればよいですか

分類Dev

SwiftでAlamofireを使用するときに応答ヘッダーを取得するにはどうすればよいですか?

分類Dev

アプリデリゲートの「performFetchWithCompletionHandler」関数でAlamofireからデータを取得するにはどうすればよいですか?

分類Dev

Alamofire エラーから根本的なエラーを取得するにはどうすればよいですか?

分類Dev

応答クロージャー内のAlamofire要求パラメーターにアクセスするにはどうすればよいですか?

分類Dev

Alamofireリクエストからの応答が200であるかどうかにかかわらず、シークビューを変更するにはどうすればよいですか?

分類Dev

SwiftでJSONを使用したAlamofireリクエストの後にAnyObjectで<AnyObject>応答を変換するにはどうすればよいですか?

分類Dev

AlamofireルータークラスをSwift3に移行するにはどうすればよいですか?

分類Dev

Alamofireパラメーターで配列を使用するにはどうすればよいですか?

分類Dev

このjsonをAlamofireでデコードするにはどうすればよいですか?

分類Dev

Swiftでオプション(AlamoFire応答オブジェクト)を安全に解凍するにはどうすればよいですか?

分類Dev

Swift 3:ALamofire 4のリクエストボディでパラメーターを追加または削除するにはどうすればよいですか?

分類Dev

AlamofireでのPOSTリクエストからの応答のjsonコンテンツをすばやく印刷するにはどうすればよいですか?

分類Dev

Alamofireでグローバル変数を変更するにはどうすればよいですか?

分類Dev

Alamofire 4.5、Swift4のヘッダーで `apikey`を送信するにはどうすればよいですか?

分類Dev

スイフト2でAlamofire.request()。responseJSONの結果値を取得するにはどうすればよいですか?

分類Dev

System.HashCode.Combineを8つ以上の値で使用するにはどうすればよいですか?

分類Dev

Alamofireは「Optional(data)」を出力します。「Optional」を削除するにはどうすればよいですか。

分類Dev

Swiftのスイッチケースを使用してAlamofireからのエラーを説明するにはどうすればよいですか?

分類Dev

AlamofireポッドをAppleWatch拡張機能に追加するにはどうすればよいですか?

分類Dev

ポストAPIにalamofireを使用するにはどうすればよいですか

分類Dev

POST Jsonと画像をphp alamofireに送信するにはどうすればよいですか

分類Dev

Swift:Alamofire に同期スレッドを使用するにはどうすればよいですか?

分類Dev

文字列をutf-8に変換するにはどうすればよいですか?(Swift、Alamofire)

分類Dev

Alamofire 4でファイルをダウンロードして、Documentsディレクトリに保存するにはどうすればよいですか?

分類Dev

Alamofire DownloadRequestは、サーバーから応答データを検証して取得します

分類Dev

Alamofireの返品データを入手したら、次に何をすればよいですか?

Related 関連記事

  1. 1

    iOS Swiftでalamofireを使用してjson応答を取得するにはどうすればよいですか?

  2. 2

    Alamofire + Combine:HTTP応答ステータスコードを取得します

  3. 3

    Swift4のAlamofireからデータを解析するにはどうすればよいですか

  4. 4

    SwiftでAlamofireを使用するときに応答ヘッダーを取得するにはどうすればよいですか?

  5. 5

    アプリデリゲートの「performFetchWithCompletionHandler」関数でAlamofireからデータを取得するにはどうすればよいですか?

  6. 6

    Alamofire エラーから根本的なエラーを取得するにはどうすればよいですか?

  7. 7

    応答クロージャー内のAlamofire要求パラメーターにアクセスするにはどうすればよいですか?

  8. 8

    Alamofireリクエストからの応答が200であるかどうかにかかわらず、シークビューを変更するにはどうすればよいですか?

  9. 9

    SwiftでJSONを使用したAlamofireリクエストの後にAnyObjectで<AnyObject>応答を変換するにはどうすればよいですか?

  10. 10

    AlamofireルータークラスをSwift3に移行するにはどうすればよいですか?

  11. 11

    Alamofireパラメーターで配列を使用するにはどうすればよいですか?

  12. 12

    このjsonをAlamofireでデコードするにはどうすればよいですか?

  13. 13

    Swiftでオプション(AlamoFire応答オブジェクト)を安全に解凍するにはどうすればよいですか?

  14. 14

    Swift 3:ALamofire 4のリクエストボディでパラメーターを追加または削除するにはどうすればよいですか?

  15. 15

    AlamofireでのPOSTリクエストからの応答のjsonコンテンツをすばやく印刷するにはどうすればよいですか?

  16. 16

    Alamofireでグローバル変数を変更するにはどうすればよいですか?

  17. 17

    Alamofire 4.5、Swift4のヘッダーで `apikey`を送信するにはどうすればよいですか?

  18. 18

    スイフト2でAlamofire.request()。responseJSONの結果値を取得するにはどうすればよいですか?

  19. 19

    System.HashCode.Combineを8つ以上の値で使用するにはどうすればよいですか?

  20. 20

    Alamofireは「Optional(data)」を出力します。「Optional」を削除するにはどうすればよいですか。

  21. 21

    Swiftのスイッチケースを使用してAlamofireからのエラーを説明するにはどうすればよいですか?

  22. 22

    AlamofireポッドをAppleWatch拡張機能に追加するにはどうすればよいですか?

  23. 23

    ポストAPIにalamofireを使用するにはどうすればよいですか

  24. 24

    POST Jsonと画像をphp alamofireに送信するにはどうすればよいですか

  25. 25

    Swift:Alamofire に同期スレッドを使用するにはどうすればよいですか?

  26. 26

    文字列をutf-8に変換するにはどうすればよいですか?(Swift、Alamofire)

  27. 27

    Alamofire 4でファイルをダウンロードして、Documentsディレクトリに保存するにはどうすればよいですか?

  28. 28

    Alamofire DownloadRequestは、サーバーから応答データを検証して取得します

  29. 29

    Alamofireの返品データを入手したら、次に何をすればよいですか?

ホットタグ

アーカイブ