You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中向Alamofire发送请求前如何整理数组?

在Swift中使用Alamofire发送请求前整理数组

从你的代码来看,你目前是直接把原始产品数组塞进请求参数里,还错误地在响应回调里处理数组——其实我们需要在构建请求参数的阶段就完成数组的整理操作,这样发送给服务器的就是已经处理好的数组了。

下面根据常见的数组整理需求,给你具体的实现方案:


常见的数组整理场景及实现

1. 对数组进行排序

比如按产品价格降序排列,或者按产品名称升序排列:

// 假设这是你的原始产品数据(比如从购物车、数据库获取)
let originalProducts: [[String: Any]] = [
    ["product_name": getName, "product_price": getTotal, "product_category": getProductType],
    // 可以添加更多产品条目
]

// 按产品价格降序排序(注意处理类型转换,避免崩溃)
let sortedProducts = originalProducts.sorted {
    guard let price1 = $0["product_price"] as? Double, 
          let price2 = $1["product_price"] as? Double else {
        return false // 类型转换失败时保持原有顺序
    }
    return price1 > price2
}

2. 过滤数组(移除不符合条件的元素)

比如移除价格为0的产品,或者过滤掉特定分类的产品:

// 过滤掉价格<=0的产品
let filteredProducts = originalProducts.filter {
    guard let price = $0["product_price"] as? Double else {
        return false // 不保留类型转换失败的条目
    }
    return price > 0
}

3. 转换数组元素(修改字段内容)

比如统一产品分类为大写,或者格式化产品价格:

// 统一产品分类为大写格式
let transformedProducts = originalProducts.map { product in
    var mutableProduct = product // 字典是值类型,需要创建可变副本
    if let category = mutableProduct["product_category"] as? String {
        mutableProduct["product_category"] = category.uppercased()
    }
    // 还可以添加其他字段的修改逻辑
    return mutableProduct
}

4. 对每个产品的键值对排序(部分API要求参数顺序)

如果服务器要求每个产品的字段按特定顺序排列(比如按键名升序),可以这样处理:

let sortedFieldProducts = originalProducts.map { product in
    // 先按键名排序,再重新组装成字典
    return product.sorted { $0.key < $1.key }
        .reduce(into: [String: Any]()) { result, pair in
            result[pair.key] = pair.value
        }
}

集成到你的请求代码中

不管你选择哪种整理方式,核心都是先处理好products数组,再把它放进请求参数字典里。修改后的完整代码示例(以排序为例):

// 1. 准备原始产品数据
let originalProducts: [[String: Any]] = [
    ["product_name": getName, "product_price": getTotal, "product_category": getProductType],
    // 其他产品...
]

// 2. 整理数组:按价格降序排序
let sortedProducts = originalProducts.sorted {
    guard let price1 = $0["product_price"] as? Double, 
          let price2 = $1["product_price"] as? Double else {
        return false
    }
    return price1 > price2
}

// 3. 构建请求参数
let request = NSMutableDictionary() 
request.setDictionary([ 
    "merchant_reference": getRandomMerchant, 
    "merchant_identifier": "e54638eb", 
    "access_code": "hRRVGXrIpHSYoH19Ebwt", 
    "signature": base64Str, 
    "service_command": "OTP_GENERATE", 
    "language": "en", 
    "payment_option": "VALU", 
    "phone_number": "01008606003", 
    "merchant_order_id": getRandomMerchant, 
    "amount": getTotal, 
    "currency": "EGP", 
    "products": sortedProducts // 这里使用整理后的数组
]) 

// 4. 发送Alamofire请求
Alamofire.request(URLAPi.URL_Payment_Api, method: .post, parameters: (request as! Parameters), encoding: JSONEncoding.default).responseJSON { (response) in 
    debugPrint(response) 
    if response.result.isSuccess { 
        let jsonpayfortrequest = JSON(response.result.value!) 
        let passobjectforrootclasspayfort = OTPGenrateModel(fromJson: jsonpayfortrequest) 
        print(passobjectforrootclasspayfort.transaction_id!) 
        SVProgressHUD.dismiss() 
    } else { 
        print("error connection") 
        SVProgressHUD.dismiss() 
    } 
}

小提醒:你原来代码里在响应回调中对jsonpayfortrequest做的排序操作,是处理服务器返回的数据,和请求前的数组整理没有关系,注意区分这两个阶段哦~

内容的提问来源于stack exchange,提问作者user12095151

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 14:52:50