【问题标题】:How to handle Alamofire Response in ios swift 4?如何在 ios swift 4 中处理 Alamofire 响应?
【发布时间】:2020-12-02 22:47:11
【问题描述】:

我能够使用 Alamofire 集成 POST 请求。我正在获取以下响应。但我需要将“docname”关键文档添加到数组中。能否请任何人指导我处理此回复

My Response:

{
    "ResponsePayload": {
        "StatusData": {
            "StatusCode": "200",
            "Status": "SUCCESS",
            "Documents": [
                {
                    "docname": "Standard",
                    "isUploaded": "true"
                },
                {
                    "docname": "Standard2",
                    "isUploaded": "true"
                },
                {
                    "docname": "Standard3",
                    "isUploaded": "false"
                },
                {
                    "docname": "Standard4",
                    "isUploaded": "false"
                },
                {
                    "docname": "Standard5",
                    "isUploaded": "true"
                },
                {
                    "docname": "Standard",
                    "isUploaded": "true"
                },
                {
                    "docname": "Standard",
                    "isUploaded": "false"
                },
                {
                    "docname": "Standard",
                    "isUploaded": "true"
                },
                {
                    "docname": "Standard",
                    "isUploaded": "true"
                },
                {
                    "docname": "DNC Format",
                    "isUploaded": "true"
                },
                {
                    "docname": "Form 60",
                    "isUploaded": "false"
                },
                {
                    "docname": "Standard",
                    "isUploaded": "true"
                },
                {
                    "docname": "Standard",
                    "isUploaded": "false"
                }
            ]
        }
    }
}

我的源代码:

func getMandatoryDocs(){

    print("calling ")
    
let url = "url"
    
    
    let headers = ["Content-Type": "application/json"]

    
    let parameters: Parameters = [
        "Request": [
            "RequestPayload": [
                "ProposalId": self.textField?.text!,
                "Type": "getMandatoryDocuments"
            ]
        ]
    ]
    
    
Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in
            if response.result.isFailure {
                            //In case of failure
                }else {
                            //in case of success

// 打印(响应)

                            switch response.result {
                            case .success(let response):
                                //Sucess
                                //                        self.progress.hide()
                                //                            print("response :-", response)
        
                                let json = response as? [String: Any]

// 打印(json!)

                                self.status = json!["Status"] as? String
        
                                print(self.status)
                
                            case .failure(let error):
                                //Failure
                                print(error.localizedDescription)
                                //                        self.progress.hide()
                            }
        
        
        
        
        
                        }
                    }
    
}

【问题讨论】:

    标签: ios swift iphone ipad swift4


    【解决方案1】:

    为响应json创建数据类型如下,并使用JSONDecoder解析响应。

    // MARK: - PostBody
    struct PostBody: Codable {
        let responsePayload: ResponsePayload
    
        enum CodingKeys: String, CodingKey {
            case responsePayload = "ResponsePayload"
        }
    }
    
    // MARK: - ResponsePayload
    struct ResponsePayload: Codable {
        let statusData: StatusData
    
        enum CodingKeys: String, CodingKey {
            case statusData = "StatusData"
        }
    }
    
    // MARK: - StatusData
    struct StatusData: Codable {
        let statusCode: String
        let status: String
        let documents: [Document]
    
        enum CodingKeys: String, CodingKey {
            case statusCode = "StatusCode"
            case status = "Status"
            case documents = "Documents"
        }
    }
    
    // MARK: - Document
    struct Document: Codable {
        let docname: String
        let isUploaded: String
    
        enum CodingKeys: String, CodingKey {
            case docname = "docname"
            case isUploaded = "isUploaded"
        }
    }
    
    AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseData { response in
        switch response.result {
        case .success(let data):
            do {
                let postBody = try JSONDecoder().decode(PostBody.self, from: data)
                print(postBody.responsePayload.statusData.statusCode)
                print(postBody.responsePayload.statusData.documents.map { $0.docname })
             } catch {
                 print(error)
             }
        case .failure(let error):
            print(error)
        }
    }
    

    【讨论】:

    • 这应该是公认的答案。你能告诉我如何将“docname”附加到数组中吗?
    • @Gopal,不明白这个问题。您想将 docname 添加到其他字符串数组吗?或者您只想创建一个文档名数组?
    • 我只想创建一个文档名数组
    • @Gopal 请查看编辑。我已经打印了上面的文档名列表。
    猜你喜欢
    • 2019-02-10
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 2015-03-27
    • 2019-03-05
    相关资源
    最近更新 更多