简体   繁体   中英

array of images from json in to the CollectionView Custom cell swift4

I want to pass the data from my JSON Url to my collection view cell, so after parsing my json I have got array of URL links, the question is how to send it to cell imageView?

here is my code

import UIKit

class ItemsListViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource{

  var myItems = [Item]()


  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return myItems.count
  }

  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath) as! CollectionViewCell

    cell.itemPriseLabel.text = myItems[indexPath.row].currentPrice

    let imageUrl =   myItems[indexPath.row].productImageUrl
    print(imageUrl)


    cell.itemImage.image? = imageUrl[indexPath.row]

    return cell
  }

  var category1: Categories?

  @IBOutlet weak var colectionViewVariable: UICollectionView!

  override func viewDidLoad() {
    super.viewDidLoad()
    downloadJSON3 {
        self.colectionViewVariable.reloadData()

    }

    colectionViewVariable?.dataSource = self
    colectionViewVariable?.delegate = self

    // Do any additional setup after loading the view.
  }

}
func getDataFromUrl(url: URL, completion: @escaping (Data?, URLResponse?, Error?) -> ()) {
    URLSession.shared.dataTask(with: url) { data, response, error in
        completion(data, response, error)
    }.resume()
}

func downloadImage(url: URL) {
    print("Download Started")
    getDataFromUrl(url: url) { data, response, error in
        guard let data = data, error == nil else { return }
        print(response?.suggestedFilename ?? url.lastPathComponent)
        print("Download Finished")
        DispatchQueue.main.async() {
            self.imageView.image = UIImage(data: data)
        }
    }
}

Duplicate: Answer found HERE I've stacked it into one concise answer but you should definitely read the answer as it is in the link as it is more complete and better altogether.

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath) as! CollectionViewCell

    cell.itemPriseLabel.text = myItems[indexPath.row].currentPrice

    if let imageUrl = myItems[indexPath.row].productImageUrl.first {

        URLSession.shared.dataTask(with: imageUrl, completionHandler: { (data, response, error) in
            guard let data = data, response != nil, error == nil else {return}


            DispatchQueue.main.async(execute: { () -> Void in
                let image = UIImage(data: data)

                if let cell = collectionView.cellForItem(at: indexPath) as? CollectionViewCell {
                    cell.itemImage.image = image
                }

            })
        }).resume()

    }

    return cell
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM