Loading/Downloading image from URL on Swift

前端 未结 30 2508
感动是毒
感动是毒 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 05:49

    A method for getting the image that is safe and works with Swift 2.0 and X-Code 7.1:

    static func imageForImageURLString(imageURLString: String, completion: (image: UIImage?, success: Bool) -> Void) {
        guard let url = NSURL(string: imageURLString),
            let data = NSData(contentsOfURL: url),
            let image = UIImage(data: data)
            else { 
                completion(image: nil, success: false); 
                return 
           }
    
        completion(image: image, success: true)
    }
    

    You would then call this method like so:

    imageForImageURLString(imageString) { (image, success) -> Void in
            if success {
                guard let image = image 
                     else { return } // Error handling here 
                // You now have the image. 
             } else {
                // Error handling here.
            }
        }
    

    If you are updating the view with the image, you will have to use this after the "if success {":

        dispatch_async(dispatch_get_main_queue()) { () -> Void in
             guard let image = image 
                  else { return } // Error handling here 
             // You now have the image. Use the image to update the view or anything UI related here
             // Reload the view, so the image appears
        }
    

    The reason this last part is needed if you are using the image in the UI is because network calls take time. If you try to update the UI using the image without calling dispatch_async like above, the computer will look for the image while the image is still being fetched, find that there is no image (yet), and move on as if there was no image found. Putting your code inside of a dispatch_async completion closure says to the computer, "Go, get this image and when you are done, then complete this code." That way, you will have the image when the code is called and things will work well.

提交回复
热议问题