如何在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
相关产品推荐
相关产品推荐

