Comment charger une image de manière asynchrone ? avec RxSwift
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 typeSingle<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.