从 alamofire 中的 api 调用中提取响应数据

Extract response data from api call in alamofire

我读过很多关于从 api 获取响应对象的文档,但无法推导出如何提取数据。我在 api 通话中使用了 alamofire。 api 调用就像

AF.request("http://10.177.41.163:9000/signup",
                   method: .post,
                   parameters: parameters,
                   encoder: JSONParameterEncoder.default).responseJSON{ response in
                   print(response.result)


在我的打印语句中,我得到的回复是

`success({
    error =     {
        code = PC05;
        message = "User already exsists";
    };
    payload =     {
    };
    success = 0;
})`

很好,但我想提取错误代码,如何实现?以及一般如何从 swift.

中的响应中提取数据
AF.request("http://10.177.41.163:9000/signup",
                   method: .post,
                   parameters: parameters,
                   encoder: JSONParameterEncoder.default).responseJSON{ response in
                   print(response.result)

                   let responseJSON = JSON(response.result) // response converted in json format

                   let statusCode = responseJSON["error"]["code"].stringValue // You can get status code

注意:安装 pod 'SwiftyJSON' 以将 response.result 转换为 JSON 格式。

你需要解码jSON响应,所以创建一个模型来解码这个,当然之前还要检查响应是否成功,你会举个例子:

声明自己为模特:

struct RootResponse : Decodable {
    var error: ErrorStruct
    var payload: PayloadStruct
    var success: Int
}

struct ErrorStruct: Decodable {
    var code: String
    var message: String
}

struct PayloadStruct : Decodable {
    var ?
}

根据 jSON 响应声明模型后,您可以切换到向您发出请求的函数:

AF.request("http://10.177.41.163:9000/signup",
                   method: .post,
                   parameters: parameters,
                   encoder: JSONParameterEncoder.default).responseJSON{ response in
                   print(response.result) 

                switch response.result {
                case .success:
                    if let data = response.data {
                        print(data)
                        // Convert This in JSON
                        do {
                            let responseDecoded = try JSONDecoder().decode(RootResponse.self, from: data)
                            print("USER: ", responseDecoded.error.code, "Etc...")
                        }catch let error as NSError{
                            print(error)
                        }

                    }
                case .failure(let error):
                    print("Error:", error)
                }

}

希望对您有所帮助。