Loading/Downloading image from URL on Swift

前端 未结 30 3192
感动是毒
感动是毒 2020-11-21 05:39

I\'d like to load an image from a URL in my application, so I first tried with Objective-C and it worked, however, with Swift, I\'ve a compilation error:

30条回答
  •  梦如初夏
    2020-11-21 06:14

    class func downloadImageFromUrl(with urlStr: String, andCompletionHandler:@escaping (_ result:Bool) -> Void) {
            guard let url = URL(string: urlStr) else {
                andCompletionHandler(false)
                return
            }
            DispatchQueue.global(qos: .background).async {
                URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) -> Void in
                    if error == nil {
                        let httpURLResponse = response as? HTTPURLResponse
                        Utils.print( "status code ID : \(String(describing: httpURLResponse?.statusCode))")
                        if httpURLResponse?.statusCode == 200 {
                            if let data = data {
                                if let image = UIImage(data: data) {
                                    ImageCaching.sharedInterface().setImage(image, withID: url.absoluteString as NSString)
                                    DispatchQueue.main.async {
                                        andCompletionHandler(true)
                                    }
                                }else {
                                    andCompletionHandler(false)
                                }
                            }else {
                                andCompletionHandler(false)
                            }
                        }else {
                            andCompletionHandler(false)
                        }
                    }else {
                        andCompletionHandler(false)
                    }
                }).resume()
            }
        }
    

    I have created a simple class function in my Utils.swift class for calling that method you can simply accesss by classname.methodname and your images are saved in NSCache using ImageCaching.swift class

    Utils.downloadImageFromUrl(with: URL, andCompletionHandler: { (isDownloaded) in
                                if isDownloaded {
                                    if  let image = ImageCaching.sharedInterface().getImage(URL as NSString) {
                                        self.btnTeam.setBackgroundImage(image, for: .normal)
                                    }
                                }else {
                                    DispatchQueue.main.async {
                                        self.btnTeam.setBackgroundImage(#imageLiteral(resourceName: "com"), for: .normal)
                                    }
                                }
                            })
    

    Happy Codding. Cheers:)

提交回复
热议问题