Ios 如何使用swift将可编码结构发送到服务器
我几乎是swift的新手,我面临一个运行时错误,它说: 类型不匹配(Swift.Dictionary,Swift.DecodingError.Context(codingPath:[],debugDescription:“应解码字典,但找到数组。”,underlineerror:nil)) 我有一个需要发送到API的数据数组 下面的代码显示了API将接受的模型 Json 我的结构:Ios 如何使用swift将可编码结构发送到服务器,ios,arrays,json,swift,xcode,Ios,Arrays,Json,Swift,Xcode,我几乎是swift的新手,我面临一个运行时错误,它说: 类型不匹配(Swift.Dictionary,Swift.DecodingError.Context(codingPath:[],debugDescription:“应解码字典,但找到数组。”,underlineerror:nil)) 我有一个需要发送到API的数据数组 下面的代码显示了API将接受的模型 Json 我的结构: struct Itemm : Codable { var unitNo:Int? var
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)
}
我在用阿拉莫菲尔和莫亚图书馆。
有人知道我应该如何向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)
编码正常,但重新解码失败 错误信息非常清楚。你必须解码一个数组
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)
我对Moya不太熟悉,但只要看一眼,您的
var items=[Itemm]()
似乎是一个数组,您正在使用jsonecoder
对其进行编码并将其作为字典发送。您可能希望尝试将项
数组转换为字典(请参阅),并确定这是否会产生影响。请注意,这可能会导致服务器端的解析问题,但知道这是否解决了Xcode的错误是很有意思的。我对Moya不是很熟悉,但只要看一眼,您的var items=[Itemm]()
似乎是一个数组,您正在使用jsonecoder
对其进行编码并将其作为字典发送。您可能希望尝试将项
数组转换为字典(请参阅),并确定这是否会产生影响。请注意,这可能会导致服务器端的解析问题,但如果这能解决Xcode的错误,那将是一件有趣的事情!!无法将“[[String:Int]]”类型的值转换为预期的参数类型“[String:Any]”代码中存在一些不一致之处。iItem
enum无效,JSON中的键与结构成员不匹配。显示JSON的代码的第一部分是问题之一,我不知道我的结构是否正确!我只是回答这个问题来解决类型不匹配错误。为了解决后续错误——正如我已经说过的那样——代码中存在太多的不一致和信息缺失。例如,您为什么要对其进行编码和解码?为什么要对项目进行编码,而不是更可能的welcomee
?所有成员的发送消息是什么?
?我用建议更新了答案,但我不知道它是否有效。我尝试此操作时出错!!无法将“[[String:Int]]”类型的值转换为预期的参数类型“[String:Any]”代码中存在一些不一致之处。iItem
enum无效,JSON中的键与结构成员不匹配。显示JSON的代码的第一部分是问题之一,我不知道我的结构是否正确!我只是回答这个问题来解决类型不匹配错误。为了解决后续错误——正如我已经说过的那样——代码中存在太多的不一致和信息缺失。例如,您为什么要对其进行编码和解码?为什么要对项目进行编码,而不是更可能的welcomee
?什么是发送给所有成员的?我用建议更新了答案,但我不知道它是否有效。