我在尝试将json api数据解码为可编码类时遇到错误

时间:2019-06-02 17:22:51

标签: ios swift alamofire

我遇到错误尝试解码从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 {
        }

        }

2 个答案:

答案 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