0

I have an API call GET in Swift 5 Code for fetching the Images, I am getting url of the images , I have to change the url into UIImage to append the urls to a arrayimages=UIImage, data of the url is there but it is not appending to the arrayImages. my task is to put all the data images into the collection view ,if there is another way then guide me , Thanks.

--->. let arrayImages = UIImages

 guard let data = response?.data(using: .utf8) else   {
            return
        }
        do {
            let jsonObj = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String: Any]
            if jsonObj["error"] as! Bool == false {
                print("galleryResponse/\(jsonObj)")
                let jsonResponse = jsonObj["response"] as! [[String: Any]]

                for i in 0...jsonResponse.count-1 {
                    let strGalleryImage = jsonResponse[i]["Gallery_Full"] as? String

                    if let imgurl = strGalleryImage {

                        self.userImageString1 = "\(USER_IMAGE_BASE_URL)\(imgurl)"

                    }
                    var imageString1: String?
                    var url1: URL!
                    imageString1 = self.userImageString1


                    if let imageUrlString1 = imageString1 {
                        url1 = URL(string: imageUrlString1)

                        DispatchQueue.global().async { [weak self] in
                            if let data = try? Data(contentsOf: url1!){
                                 if  let imagedata = UIImage(data: data){

                                    print("YES_IMG")

                                    if data != nil {

                                         DispatchQueue.main.async {
                                            print("append_IMG")
                                        self!.arrimages.append(imagedata)


                                        }
                                    }
                                }


                            }


                        }


                    }


                //}
                }
            }
        } catch {
            print("Unable_to_load_data:/\(error)")
        }

            })


    }
Vishav
  • 37
  • 8

2 Answers2

0

You can use AlamofireImage pod to convert the image URL to the image.

First, you need to install the pod file pod 'AlamofireImage'. Then import AlamofireImage in your ViewController.

Here is the way to implement that.

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "YourCollectionViewCellIdentifier", for: indexPath) as! YourCollectionViewCell
    Alamofire.request("your image URL in String formate").responseImage { response in
        debugPrint(response)
        debugPrint(response.result)
        if let image = response.result.value {
            cell.YourImage.image = image
        }
    }
    return cell
}
Vinu Jacob
  • 393
  • 2
  • 15
0
Hi I found out the Best solution i.e, through SDWebImages. 
* Fist I get the response into url and then append it to a array = (String)[]
* then I called the sdwebimages in cellforitem function...
    ####CODE 

// getting the url images into an array of string

  let jsonResponse = jsonObj["response"] as! [[String: Any]]
                    print("galleryResponse/\(jsonObj)")


                    for i in 0...jsonResponse.count-1 {
       let strGalleryImage = jsonResponse[i]["Gallery_Full"] as? String
                        print("o12\(strGalleryImage!)")

        let str =  String((strGalleryImage?.dropFirst(11))!) as? String
                        print("LAAL\(str)")

                if let imgurl = str {

                    self.arrimages.append(imgurl)
                    print("kl\(self.arrimages)")
                    self.collectionView.reloadData()
        }




THEN ->
    //Calling the images into cellforitem 

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

       // called the url array into sd_setimages 

        cell.imgProfile.sd_setImage(with: URL(string: arrimages[indexPath.row]), placeholderImage: UIImage(named: "placeholder.jpg"))

        return cell
    }

Thanks for the answers but this is simplest solution of all...:)
Vishav
  • 37
  • 8