Как конвертировать изображения URL в UIImages в Swift5 и добавлять в массив - PullRequest
0 голосов
/ 06 июля 2019

У меня есть вызов API GET в Swift 5 Code для получения изображений, я получаю URL-адрес изображений, мне нужно изменить URL-адрес на UIImage, чтобы добавить URL-адреса к массиву image = UIImage, данные URL-адреса естьно это не добавление к массиву изображений.Моя задача состоит в том, чтобы поместить все изображения данных в представление коллекции, если есть какой-то другой способ, помогите мне, спасибо.

--->.пусть 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)")
        }

            })


    }

Ответы [ 2 ]

0 голосов
/ 18 июля 2019
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...:)
0 голосов
/ 18 июля 2019

Вы можете использовать AlamofireImage pod для преобразования URL-адреса изображения в изображение.

Сначала необходимо установить файл pod pod 'AlamofireImage' .Затем импортируйте AlamofireImage в свой ViewController.

Вот способ реализовать это.

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
}
...