ios - 如何使用 swift 将可编码结构发送到服务器
问题描述
我对 swift 几乎是新手,我面临一个运行时错误,它说:
typeMismatch(Swift.Dictionary, Swift.DecodingError.Context(codingPath: [], debugDescription: "期望解码 Dictionary 但找到了一个数组。",底层错误: nil))
我有一组数据需要发送到 API。
下面的代码显示了 API 将接受的模型
json
{
"items": [
{
"Number": 1,
"ID": 9827
}
]
}
我的结构:
struct Itemm : Codable {
var unitNo:Int?
var personId:Int?
enum iItem : Int ,CodingKey{
case unitNo , personId
}
}
struct welcome : Codable {
var items : [Itemm?]
}
typealias welcomeList = [welcome]
下面的代码显示了我创建数组并尝试将其发送到服务器的方式
var items = [Itemm]()
for indexPath in self.selectedCells {
let data = self.data![indexPath.section]
let contact = data.contacts[indexPath.row]
let newItem = Itemm(unitNo: data.unitNo, personId: contact?.id)
items.append(newItem)
}
// let welcome = welcome(items: items)
print(items)
let welcomee = welcome(items: items)
print(welcomee)
do{
//I found this part on stackoverflow
let dict = try JSONDecoder().decode([String: Int].self, from: JSONEncoder().encode(items))
print("===============")
print(dict)
print("********************")
Presenter.sendSmsForAllTheMembers(AptId: aptId, data: dict)
}
catch let error
{
print(error)
}
我正在使用 Alamofire 和 Moya 库。有人知道我应该如何将我的请求发送到 API 吗?
func sendSmsForAllTheMembers(AptId:String , data:[String:Any])
{
ApiGenerator.request(targetApi: ApartemanService.sendSms(aptId: AptId, data: data), responseModel: Nil.self, success: { (response) in
if response.response.statusCode == 200 {
self.view?.SendingSmsSuccess()
}else {
do{
var errorMessage = try response.response.mapString()
errorMessage = errorMessage.replacingOccurrences(of: "\"", with: "",
options: NSString.CompareOptions.literal, range:nil)
print("errorMessage =============")
print(errorMessage)
self.view?.SendingSmsFailed(errorMessage: errorMessage)
}catch let error{
print(error)
self.view?.SendingSmsFailed(errorMessage: "خطا در ارتباط با سرور")
}
}
}) { (error) in
self.view?.SendingSmsFailed(errorMessage: "خطا در ارتباط با سرور")
}
}
解决方案
编码很好,但重新解码失败。
错误信息非常清楚。你必须解码一个数组。
try JSONDecoder().decode([[String: Int]].self...
但由于 API 需要字典,您可以直接创建字典
var items = [[String:Int]]()
for indexPath in self.selectedCells {
let data = self.data![indexPath.section]
let contact = data.contacts[indexPath.row]
items.append(["Number" : data.unitNo, "ID" : contact!.id])
}
let welcome = ["items" : items]
print(welcome)
Presenter.sendSmsForAllTheMembers(AptId: aptId, data: welcome)
推荐阅读
- node.js - 在网站上设置 Discord Guild 公告
- javascript - JavaScript 比较当前时间和选定的时间
- mongodb - 复合索引和其中一个组件的查询
- excel - 如果可能,链接两列并合并它们
- c++ - 有没有办法对从字符串 cpp 转换的整数执行算术运算
- python - GCE 上的 FTP 服务器无法连接
- automated-tests - Q - Postman:如何在测试之间清除集合变量
- python - 使用pyarrow读取镶木地板文件时如何解码字典列?
- python - 带有加载栏的 QDialog 未按时显示
- r - 如何在 OLS 回归中包含分数