Swift: datos de solicitud de red Alamofire devueltos para su procesamiento

Mira un fragmento de código

//创建一个数据结构(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))
                        })
                    }
            }
        }

En el proceso de ajuste de una interfaz, debe comprender qué tipo de parámetros paso, qué tipo de datos obtengo a través del código después de obtener mis parámetros en segundo plano, esos datos satisfacen mis necesidades de front-end, no nos importa cómo se escribe el fondo, nosotros Solo nos importa obtener el valor que queremos, luego tenemos que crear los datos correspondientes para recibir el valor devuelto después de la respuesta. Cuando escribimos la interfaz, agregamos un cierre completo al parámetro de devolución de llamada, para que en el otro Después de pasar los parámetros que se pasarán en la clase, puede llevar los datos que queremos cuando se llame, y luego está utilizando los datos obtenidos para completar su interfaz de usuario u otras funciones

Supongo que te gusta

Origin blog.csdn.net/SoftwareDoger/article/details/100582728
Recomendado
Clasificación