Search code examples
swiftcachingfirebase-storagesdwebimage

How to cache an array of Images fetched from firebase Storage using SDWebImage in Swift 4?


I am fetching images from firebase storage in the form of data and I want to cache the images in my app using SDWebImage. Please guide me how to achieve it?

 for x in images_list{

                let storageRef = storage.child("images/\(x).jpg")
                storageRef.getData(maxSize: 1 * 1024 * 1024) { (data, error) in
                    if let error = error{
                        print(error.localizedDescription)
                        return
                    }
                    else{
                        imagesarray.append(UIImage(data: data!)!)
                    }
                    if let x = images_list.last{
                                cell.imageDemo.animationImages = imagesarray
                                cell.imageDemo.sd_setImage(with: storageRef) // Here I Want to cache the images of **imagesarray** that are being animated
                                cell.imageDemo.animationDuration = 2
                                cell.imageDemo.startAnimating()

                    }
                }


            }

Solution

  • you are downloading imageData directly from firebase in your question. Instead of using getData you will need to use downloadURL method. Like this:

    for x in image_list {
    
            let storageRef = storage.child("images/\(x).jpg")
    
            //then instead of downloading data download the corresponding URL
            storageRef.downloadURL { url, error in
                if let error = error {
    
                } else {
    
                    //make your imageArray to hold URL rather then images directly
                    imagesArray.append(url)
                }
            }
    
        }
    
        //////This is were you would use those url////////
        let url = imageArray.first!
        imageView.sd_setImage(with: url, completed: nil)
    

    The most important part here is download url rather than image data. And whenever you set the image url to the imageView the SDWebImage library will cache it and display if already cached