【发布时间】:2019-02-24 03:59:20
【问题描述】:
我几乎是 swift 新手,我遇到了一个运行时错误,上面写着:
typeMismatch(Swift.Dictionary, Swift.DecodingError.Context(codingPath: [], debugDescription: "本应解码 Dictionary 但找到了一个数组。", underlyingError: 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: "خطا در ارتباط با سرور")
}
}
【问题讨论】:
-
我对 Moya 不是很熟悉,但是乍一看,您的
var items = [Itemm]()似乎是一个数组,而您正在使用JSONEncoder对其进行编码并将其作为字典。您可能希望尝试将items数组转换为字典(请参阅here)并确定这是否会产生影响。请注意,这可能会导致服务器端出现解析问题,但知道这是否能解决 Xcode 的错误会很有趣。
标签: ios arrays json swift xcode