Résumé: Cette version permet de charger une image de manière asynchrone depuis une URL avec RxSwift

Description

On utilise pour cela les helpers définis dans mon post précédent: A RxSwift helper for network calls, JSON decoding and image decoding

L’operation de chargement des données depuis le réseau et celle de décodage en tâche de fond sont combinées à l’aide de l’opérateur flatMap.

L’implementation repose sur URLSession pour le téléchargement et sur NSCache pour cacher les images. De plus, un niveau de cache supplémentaire URLCache sert à cacher les réponses du réseau.

AsyncImageLoader.swift

L’interface publique est plutôt simple:

  • fetchObservable: Cette methode retourne un observable de type Single<UIImage> à partir de l’url fournie

CameraRollCell.swift

Un exemple d’utilisation ce chargement d’image dans une UICollectionViewCell.

Note: ici, l’utilisation du DisposeBag permet d’annuler un chargement déjà en cours lors d’un défilement par exemple.