我在api中有这样的数组:
[{
data = "";
datetime = "23.07.2020 12:09";
id = 340593;
status = "My current task is";
},...]
我创建了这样的结构:
struct RemarksModel {
let id:Int
let status,datetime:String
let data:String?
}
我在这里提出请求:
AF.request(URLRequest(url:Pathes.init(endpoint: "notepad/(noteModel?.id ?? 0)/documentation").resourseUrl),
interceptor: CallInterceptor.init(method:HTTPMethod.get)).responseJSON(completionHandler: { (response) in
print(response.description)
switch response.result{
case .success(let array):
let remarksData = array as? [RemarksModel]
let json = response.data as? [RemarksModel]
print(json?.count)
// if remarksData?.count ?? 1 > 0{
// self.remarksArray += remarksData!
// self.tableView.reloadData()
// }
case .failure(let error):
print(error.localizedDescription)
}
})
问题是我无法将这个数组转换为我的模型对象数组。当我试图将所有接收到的数据添加到数组时,我的应用程序崩溃了,因为我的数组为零,尽管日志中有json。也许我必须使用另一种方法将接收到的json数组转换为对象数组?
在确认RemarksModel
到Codable
(或仅Decodable
(协议后,可以直接使用.responseDecodable
函数,而不是.responseData
或.responseJSON
.responseDecodable(of: [RemarksModel].self, queue: .main, decoder: JSONDecoder()) { (response) in
switch response.result {
case let .success(data):
// success
print(data)
case let .failure(error):
// error
print(error.localizedDescription)
}
}
您可以将Codable
协议添加到RemarksModel
,并使用.responseData
而不是.responseJSON
.responseData { response in
switch response.result {
case let .success(data):
do {
let result = try JSONDecoder().decode([RemarksModel].self, from: data)
// success
} catch {
print("decoding error:n(error)")
// error
}
case let .failure(error):
// error
}
}