在swift中解析UICollectionViewCell中的json

时间:2017-07-17 09:53:43

标签: ios json swift

我想在UICollectionviewCell中解析JSON。我有一个带有两个UICollectionviewCell的collectionViewController。在collectionViewController中,第一个单元格用于后台滚动,第二个单元格用于解析JSON。代码中没有错误,这是我的JSON代码。

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()
}

1 个答案:

答案 0 :(得分:1)

你什么时候打电话给你的职能?你应该在加载每个单元格时调用CollectionView中的方法,但这样做非常糟糕,因为每次你滚动或重新加载你的CollectionView时它都会再次解析。

你应该在一个特殊的类中解析,通过集合视图调用,最后将解析对象发送到单元格。