Swift--Alamofire 网络请求返回来的数据进行处理

看一段代码

//创建一个数据结构(struct)用来接收符合这样一个结构的数据
    struct OrderInfoList {
        var OrderNumber: String = ""
        var OrderDateTime: String = ""
        var FirstName: String = ""
        var LastName: String = ""
        var CashierNumber: String = ""
        var PaymentMethod: String = ""
        var EDCCardLast4: String = ""
        var EDCTransID: String = ""
        var PaymentDateTime: String = ""
        var AmountTendered: String = ""
        var AmountPaid: String = ""
        var EDCTipAmount: String = ""
        var ApprovedAmount: String = ""
        var Cardholder: String = ""
    }

    // 通过刷卡时保存的卡的信息得到对应此Order相关的信息
    class func fromCardInfoGetOrderInfos(cardLast:String, beginDate:String, endDate:String, complete: @escaping ([OrderInfoList])->Void) {
        if let value = PalauDefaults.syncurl.value {
            ProgressHUD.show(NSLocalizedString2("loading...",comment:""), interaction: false)
            
            //传入参数 cardLast,beginDate,endDate
            let params: [String: Any] = ["CardLast4": cardLast, "BeginDate": beginDate, "EndDate": endDate]
            
            //创建request
            let url = value + "/aaa/bbb/ccc" //url
            var request = URLRequest(url: URL (string: url)!)
            request.httpMethod = "POST"
            request.setValue("application/json", forHTTPHeaderField: "Content-Type")
            request.setValue(PalauDefaults.syncticket.value!, forHTTPHeaderField: "Session-Id")
            
            let data = try! JSONSerialization.data(withJSONObject: params, options: .prettyPrinted)
            request.httpBody = data
            request.timeoutInterval = 15
            
                   //如果接口调不通,可将下面这段代码打印出来的数据交给后台去调试
                    #if DEBUG
                    print(url)
                    print("token: \(PalauDefaults.syncticket.value!)")
                    if let JSONString = NSString(data:data as Data,encoding: String.Encoding.utf8.rawValue) {
                        print(JSONString)
                    }
                    #endif
            
            Alamofire.request(request)
                .responseJSON { (response) in
                    ProgressHUD.dismiss()
                    switch response.result {
                    case .success:
                        guard let value = response.result.value else {
                            return
                        }                      
                        let json = JSON(value) //通过断点已知返回来的json数据是一个元素为结构体的数组,这样你需要创建一个结构体来盛放返回来的这些结构体组合的数组---[OrderInfoList]
                        var array = [OrderInfoList]()
                        if let err_code = json["err_code"].int, err_code > 0 {
                            DispatchQueue.main.async(execute: {
                                Utility.showNoticeAlertView(("Get OrderInfos Failed".toLocalize(),"\(json["err_msg"].stringValue)"))
                                return
                            })
                        }
                        
                        else if let dataArray = json.array{  //返回来的是json转换成数组
                            
                            for data in dataArray{ //data就是数组里面的一个元素 OrderInfoList
                                let Order_Number = data["OrderNumber"].string ?? "" //给返回来的一个OrderNumber值赋值给Order_Number接收,下面的均是同理
                                let Order_DateTime = data["OrderDateTime"].string ?? ""
                                let First_Name = data["FirstName"].string ?? ""
                                let Last_Name = data["LastName"].string ?? ""
                                let Cashier_Number = data["CashierNumber"].string ?? ""
                                let Payment_Method = data["PaymentMethod"].string ?? ""
                                let EDC_CardLast4 = data["EDCCardLast4"].string ?? ""
                                let EDC_TransID = data["EDCTransID"].string ?? ""
                                let Payment_DateTime = data["PaymentDateTime"].string ?? ""
                                let Amount_Tendered = data["AmountTendered"].string ?? ""
                                let Amount_Paid = data["AmountPaid"].string ?? ""
                                let EDCTip_Amount = data["EDCTipAmount"].string ?? ""
                                let Approved_Amount = data["ApprovedAmount"].string ?? ""
                                let Card_holder = data["Cardholder"].string ?? ""
                                              
                                let orderInfosList = OrderInfoList(OrderNumber: Order_Number, OrderDateTime: Order_DateTime, FirstName: First_Name, LastName: Last_Name, CashierNumber: Cashier_Number, PaymentMethod: Payment_Method, EDCCardLast4: EDC_CardLast4, EDCTransID: EDC_TransID, PaymentDateTime: Payment_DateTime, AmountTendered: Amount_Tendered, AmountPaid: Amount_Paid, EDCTipAmount: EDCTip_Amount, ApprovedAmount: Approved_Amount, Cardholder: Card_holder)
                                // for循环将返回的结构体里的每一个值赋值从而组合成一个完整的数组。数组里面每一个结构体的每一个属性都赋上了值。
                                array.append(orderInfosList) //添加到临时数组里面
                                
                            }
                            complete(array)  //完成之后的回调,当别的地方调用这个方法,传入上文的三个参数之后就能拿到最终返回来的这样结构的值了。
                        }
                        
                    case .failure(let error):
                        DispatchQueue.main.async(execute: {
                            //print(error.localizedDescription)
                            Utility.showNoticeAlertView(("Get OrderInfos Failed".toLocalize(),error.localizedDescription))
                        })
                    }
            }
        }

调一个接口的过程中你需要明白,我传入什么样的参数,后台得到我的参数后通过代码得到什么样的数据,这样的数据是符合我前端的需要的,后台怎么写我们不管,我们只关心得到我们想要得到的值,那我们就要创建对应的数据来接收response之后返回来的值,我们在写接口的时候参数上面加上一个complete闭包用来进行回调,这样在另外的类中传入该传的参数后调用的时候就能携带着我们想要的数据来了,然后你在用得到的数据来填充你的UI或者其他功用

猜你喜欢

转载自blog.csdn.net/SoftwareDoger/article/details/100582728