Quiet Islet
Quiet Islet

Reputation: 536

parse json in UICollectionViewCell in swift

I want to parse JSON in UICollectionviewCell. I have a collectionViewController with two UICollectionviewCell. In collectionViewController first cell made to background scrolling and in the second I want to parse JSON. There is no error in the code, this is my JSON code.

var oCategoryFilter: CategoryFilter? {
    didSet {

        if let name = oCategoryFilter?.totalItem {
            totalItemLabel.text = name
        }

        appsCollectionView.reloadData()
    }
}

var arrProduct: [Product]?

func getPropductListByCategory(){

    let category_id:String;

    category_id = "21"

    let url = URL(string: UtilityController.BASE_URL+"/products/"+category_id)

    URLSession.shared.dataTask(with:url!) { (urlContent, response, error) in
        if error != nil {
            print(error)

        }
        else {
            do {
                let json = try JSONSerialization.jsonObject(with: urlContent!) as! [String:Any]

                print(json)

                let items = json["categories"] as? [[String: Any]] ?? []

                items.forEach { item in

                    let oProduct = Product()
                    //oProduct.id = item["id"] as? String
                    oProduct.image = item["image"] as? String
                    oProduct.name = item["name"] as? String
                    oProduct.ar_name = item["ar_name"] as? String
                    //oProduct.description = item["description"] as? String
                    oProduct.ar_description = item["ar_description"] as? String
                    oProduct.price = item["price"] as? String
                    oProduct.quantity = item["quantity"] as? String
                    oProduct.is_featured = item["is_featured"] as? String
                    oProduct.seller_id = item["seller_id"] as? String
                    oProduct.payment_required = item["payment_required"] as? String
                    oProduct.is_editors_choice = item["is_editors_choice"] as? String
                    oProduct.created_at = item["created_at"] as? String
                    oProduct.updated_at = item["updated_at"] as? String

                    self.arrProduct?.append(oProduct)
                }
                print(url)
            } catch let error as NSError {
                print(error)
            }
        }

        DispatchQueue.main.async(execute: {
            self.appsCollectionView.reloadData()
        })


        }.resume()
}

Upvotes: 0

Views: 79

Answers (1)

Antoine Simon
Antoine Simon

Reputation: 61

When are you calling your functions ? You should call the method in the CollectionView, when it is loading every cell, but doing that is really bad, because each time you will scroll or reload your CollectionView it will parse again.

You should parse in a special class, call by the collection view and this last send the parse object to the cell.

Upvotes: 1

Related Questions