我遇到错误尝试解码从alamofire获得的json api数据时,无法将类型“ Any”的值转换为预期的参数类型“数据”
var events = [Events]()
let URL_GET_DATA = "http://192.168.100.3/PrototypeWebService/api/getevents.php"
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
Alamofire.request(URL_GET_DATA).responseJSON{ response in
if let json = response.result.value{
print(json)
do {
let decoder = JSONDecoder()
let eventObject = try decoder.decode(Events.self, from: json)
print(eventObject)
self.EventTable.reloadData()
} catch {
}
}
答案 0 :(得分:0)
您应该使用responseData
方法而不是responseJSON
Alamofire.request(URL_GET_DATA)
.responseString { json in
print(json)
}
.responseData { response in
do {
let decoder = JSONDecoder()
let eventObject = try decoder.decode([Events].self, from: response)
print(eventObject)
self.EventTable.reloadData()
} catch {
print(error.localizedDescription)
}
}
答案 1 :(得分:0)
首先,强烈建议处理所有错误,至少将其打印出来。
如果您要处理Alamofire响应的原始数据,请使用responseData
而不是responseJSON
我猜events
应该是一个数组
var events = [Events]()
override func viewDidLoad() {
super.viewDidLoad()
Alamofire.request(URL_GET_DATA).responseData { response in
switch response.result {
case .success(let data):
do {
let decoder = JSONDecoder()
events = try decoder.decode([Events].self, from: data)
print(events)
self.EventTable.reloadData()
} catch {
print(error)
}
case .failure(let error):
print(error)
}
}
}
注意:
正如您在前面的问题中已经提到的那样,在数组中用作项目的结构和类应以单数形式命名。语义上,数组中的每个项目代表一个 Event
。