Не расшифровывает JSON ответ на заполненную коллекцию. - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь заполнить представление сбора данными, полученными из удаленного файла PHP.

Ответ удаленного файла PHP выглядит следующим образом:

[{"id":12,"nombre":"AGM","icono":"vCtAi1agmlogo.png"},{"id":10,"nombre":"Acer","icono":"h4QnIZacerlogo.png"},{"id":9,"nombre":"Apple","icono":"byjwZDapplelogo.png"},{"id":55,"nombre":"Cubot","icono":"xWQnfbcubotlogo.png"},{"id":110,"nombre":"Huawei","icono":"GYacqrhuaweilogo.png"},{"id":121,"nombre":"Innjoo","icono":"yWP39Ninnjoologo.png"},{"id":151,"nombre":"Lenovo","icono":"UL54jTlenovologo.png"},{"id":158,"nombre":"Majestic","icono":"ayDxNAmajesticlogo.png"},{"id":204,"nombre":"Polar","icono":"SQ3LXHpolarlogo.png"},{"id":218,"nombre":"Samsung","icono":"Vrs4hpSamsunglogo.jpg"},{"id":229,"nombre":"Sony","icono":"ZyFcI2sonylogo.png"},{"id":275,"nombre":"Xiaomi","icono":"5kRBCoxiaomilogo.png"}]

Здесь вы есть все методы для сбора Просмотр:

 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

        return marcas.count

    }
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

        print("MARCA:"+marcas[indexPath.row].nombre)
    }


    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "marca",for: indexPath) as! MarcasCollectionViewCell

        let foto_marca = marcas[indexPath.row].icono
        print(foto_marca)


        let url = URL(string: "https://../iconos/"+foto_marca)

        UIImage.loadFrom(url: url!) { image in
            cell.icono_marca.image = image

        }


        return cell


    }

И это моя функция загрузки для получения данных:

   func downloadJSON(completed: @escaping () -> ()) {
        let url = URL(string: "https://.../Api.php")


        URLSession.shared.dataTask(with: url!) { (data,response,error) in

        print("Data:",data as Any)
        print("Response:",response as Any)
        print("Error:",error as Any)

        if error == nil {
            do {
                self.marcas = try JSONDecoder().decode([Marcas].self, from: data!)

                DispatchQueue.main.async {
                    completed()
                }

            }catch{
                print("JSON Error")
            }

        }
        }.resume()


    }

Это модель для Маркаса:

struct Marcas:Decodable {

    let id: String
    let nombre: String
    let icono: String

}

Как вы можете видеть, я включил три тега печати для получения ответа от сервера.

Здесь у вас есть выходные данные печати для каждого тега:

Data: Optional(702 bytes)

Response: Optional(<NSHTTPURLResponse: 0x600000874be0> { URL: https://jogua.es/android_api/Api.php } { Status Code: 200, Headers {
    "Content-Encoding" =     (
        br
    );
    "Content-Type" =     (
        "text/html; charset=UTF-8"
    );
    Date =     (
        "Fri, 20 Mar 2020 17:38:10 GMT"
    );
    Server =     (
        cloudflare
    );
    Vary =     (
        "Accept-Encoding"
    );
    "cf-cache-status" =     (
        DYNAMIC
    );
    "cf-ray" =     (
        "5771348e09c868f4-CDG"
    );
    "expect-ct" =     (
        "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\""
    );
} })



Error: nil

Наконец, Я получаю вывод JSON Error.

Что я должен сделать, чтобы получить элементы для коллекции View?

1 Ответ

1 голос
/ 20 марта 2020

Измените модель на:

struct Marcas:Decodable {

let id: Int
let nombre, icono: String

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...