如何在Swift5中将URL图像转换为UIImage并追加到数组中

时间:2019-07-06 05:26:05

标签: arrays collections uicollectionview imagedownload swift5.1

我在Swift 5代码中有一个API调用GET来获取图像,我正在获取图像的url,我必须将url更改为UIImage才能将url附加到arrayimages = UIImage,URL的数据在那里但它不会追加到arrayImages。我的任务是将所有数据图像放入集合视图中,如果还有其他方法,请指导我,谢谢。

--->。让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 :(得分:0)

您可以使用 AlamofireImage 窗格将图像URL转换为图像。

首先,您需要安装Pod文件 pod'AlamofireImage'。然后在您的ViewController中导入AlamofireImage

这是实现该目标的方法。

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
}

答案 1 :(得分: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...:)