FIREBASE CRUD image en cache

Quand des images (profile, publications, etc...) sont stockées sur une base de données, il peut être intéressant de les garder en cache dans l'appareil, pour éviter de les télécharger à chaque fois (temps d'attente, et coûts).

Un des frameworks disponibles est la librairie "SDWebImage" de CocoaPods.

Dans le Podfile du projet ajouter :

pod 'SDWebImage'

Dans le terminal, installer le pod

xxxx@YYYYYY firebasecrud % pod install

Placer ce gestionnaire d'image dans un nouveau fichier "imageLoader.swift".

Créer une fonction "loadImage()", qui va gérer la vue (UIImageView), en faisant appel à une méthode appartenant à SDWebImage : " .sd_setImage(with: completed:)".

func loadImage(_ view: UIImageView) {
        view.sd_setImage(with: URL?, completed: SDExternalCompletionBlock?)
    }

Cette méthode a besoin d'une URL, la complétion n'est pas utile pour notre exemple

import UIKit
import SDWebImage

class ImageLoader {

    func loadImage(_ string: String?, _ view: UIImageView) {
        guard let stringUrl = string else { return }
        guard let url = URL(string: stringUrl) else { return }
        view.sd_setImage(with: url, completed: nil)
    }
}

Cette méthode peut être appelée dans le ProfilController pour affecter l'image au "profilImage" :

...
func completeForm() {
        FireDatabase().getMe { (user) in
            if let me = user {
                print("nouveau => " + me.name)
                self.user = me
                self.nameTF.placeholder = me.name
                self.surnameTF.placeholder = me.surname
                ImageLoader().loadImage(self.user?.profilImageUrl, self.profilImage)
            }
        }
    }
...