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

如何在Swift 4中使用Alamofire提交含对象数组的JSON数据?

没问题,我来帮你搞定在Swift 4里用Alamofire提交这组复杂JSON的需求!我们可以借助Swift 4的Codable协议来结构化数据,再用Alamofire发送请求,这样既安全又好维护。

第一步:定义Codable模型结构体

首先把你要提交的JSON结构拆成对应的Swift结构体,通过Codable协议实现自动序列化,同时处理JSON键和Swift属性名的大小写差异:

import Foundation

// 菜单子对象模型
struct Menu: Codable {
    let id: String
    let name: String
    
    enum CodingKeys: String, CodingKey {
        case id = "Id"
        case name = "Name"
    }
}

// 定价信息模型
struct Pricing: Codable {
    let price: Int
    let saleEnd: String
    let saleStart: String
    let salePrice: Int
    
    enum CodingKeys: String, CodingKey {
        case price = "Price"
        case saleEnd = "SaleEnd"
        case saleStart = "SaleStart"
        case salePrice = "SalePrice"
    }
}

// 准备时间模型
struct PreparationTime: Codable {
    let minCount: String
    let minTime: String
    let additionalPerItem: String
    
    enum CodingKeys: String, CodingKey {
        case minCount = "MinCount"
        case minTime = "MinTime"
        case additionalPerItem = "AdditionalPerItem"
    }
}

// 主提交数据模型
struct SubmitData: Codable {
    let menus: [Menu]
    let inStock: Bool
    let pricing: Pricing
    let sku: String
    let preparationTime: PreparationTime
    let name: String
    let businessId: String
    
    enum CodingKeys: String, CodingKey {
        case menus = "Menus"
        case inStock = "InStock"
        case pricing = "Pricing"
        case sku = "Sku"
        case preparationTime = "PreparationTime"
        case name = "Name"
        case businessId = "BusinessId"
    }
}

第二步:构建要提交的数据实例

根据你提供的JSON内容,创建对应的数据对象:

// 构建菜单数组
let menu1 = Menu(id: "5ae03b8e90435721f465050c", name: "testmenu2")
let menu2 = Menu(id: "5ae03f4490435721f465051b", name: "menu1")
let menusArray = [menu1, menu2]

// 构建定价信息
let pricingInfo = Pricing(price: 1000, saleEnd: "2018-04-20", saleStart: "2018-04-20", salePrice: 120)

// 构建准备时间
let prepTime = PreparationTime(minCount: "0", minTime: "0", additionalPerItem: "0")

// 构建完整的提交数据对象
let finalSubmitData = SubmitData(
    menus: menusArray,
    inStock: true,
    pricing: pricingInfo,
    sku: "chickenkoththutest",
    preparationTime: prepTime,
    name: "chickenkoththutest",
    businessId: "5adda52c90435519b0..." // 替换为完整的BusinessId值
)

第三步:用Alamofire发送POST请求

把模型编码成JSON数据,再通过Alamofire提交到接口:

import Alamofire

// 替换为你的实际接口地址
let targetURL = "https://your-api-endpoint.com/submit"

do {
    // 将数据模型编码为JSON格式的Data
    let jsonData = try JSONEncoder().encode(finalSubmitData)
    
    // 发送POST请求
    AF.request(targetURL, method: .post)
        .httpBody(jsonData)
        .validate()
        .responseJSON { response in
            switch response.result {
            case .success(let responseData):
                print("提交成功,返回数据:\(responseData)")
                // 这里添加请求成功后的业务逻辑
            case .failure(let error):
                print("提交失败,错误信息:\(error.localizedDescription)")
                // 这里添加请求失败后的错误处理逻辑
            }
        }
} catch {
    print("数据编码失败:\(error.localizedDescription)")
}

一些注意事项

  • 确保你使用的Alamofire版本兼容Swift 4(推荐Alamofire 4.x版本,如果你用Alamofire 5+,语法会有细微差异,比如Alamofire.request改为AF.request)
  • 如果接口需要身份验证或自定义请求头,可以在AF.request中添加headers参数,比如headers: ["Authorization": "Bearer your-token"]
  • JSON的键是大小写敏感的,所以CodingKeys里的映射一定要和目标JSON的键完全匹配
  • 记得把businessId的占位值替换为实际的完整字符串

内容的提问来源于stack exchange,提问作者Sath.Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:40:56