Я получаю сообщение об ошибке, пытаясь декодировать данные JSON API в кодируемый класс - PullRequest
0 голосов
/ 02 июня 2019

Я получаю сообщение об ошибке Невозможно преобразовать значение типа 'Любой' в ожидаемый тип аргумента 'Данные' при попытке декодировать мои данные json api, полученные из alamofire

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 голосов
/ 02 июня 2019

Прежде всего, настоятельно рекомендуется обработать все ошибки, хотя бы распечатать их.

Если вы хотите иметь дело с необработанными данными ответа 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)
        }
   }
}

Примечание:

Как уже упоминалось в одном из ваших предыдущих вопросов, структуры и классы, которые используются в качестве элементов в массиве, должны быть названы в единственном числе. Семантически каждый элемент в массиве представляет one Event.

0 голосов
/ 02 июня 2019

Вы должны использовать 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)
    }
}
...