J'ai besoin d'un peu d'aide avec AlamofireImages. Dans l'application, tapant sur une vue cellule de tableau téléchargera et définir une image en utilisant le construit en extension ImageView, voir ci-dessous:Caching AlamofireImage réponses au disque
func sendImageRequest(imageView: UIImageView, item: CatalogItem, isLargeImage: Bool? = false){
let imageURL = ImageManager.URLBuilder(sku: item.sku, largeImage: isLargeImage)
// Clear the image so that recycled images are cleared.
imageView.image = nil
// Create the request and add the token string to the authorization header
var urlRequest = try! URLRequest(url: URL(string: imageURL)!)
urlRequest.setValue("Bearer \(ImageManager.getTokenString()!)", forHTTPHeaderField: "Authorization")
// If the token exists AND is VALID (not expired) - Get the image.
if ImageManager.checkIfTokenExists() && ImageManager.checkTokenIsValid(){
debugPrint("Valid token already exists. Fetching image... TableViewExtension")
imageView.af_setImage(withURLRequest: urlRequest){ response in
switch response.result{
case .success(let image):
debugPrint(response)
debugPrint("SUCCESS")
break
case .failure(let error):
debugPrint("Error: \(error)")
debugPrint(response.response)
break
}
}
}
// Else if the token exists AND is INVALID (expired) - Delete the old token, get a new one, and fetch the image
else if ImageManager.checkIfTokenExists() && !ImageManager.checkTokenIsValid(){
debugPrint("Token expired... Getting new token.")
ImageManager.deleteToken()
let tokenRequest = NetRequest.newTokenRequest(url: "http://\(SettingsManager.KEY_ServerURL).ziizii.io/zz/jwt/new?service=images.ziizii.io")
tokenRequest.requestJWTToken(){
debugPrint("Token renewed. Fetching image...")
imageView.af_setImage(withURLRequest: urlRequest)
}
}
// If the token doesn't exist, request a new one and fetch the image.
else{
debugPrint("Requesting new token...")
let tokenRequest = NetRequest.newTokenRequest(url: "http://\(SettingsManager.KEY_ServerURL).ziizii.io/zz/jwt/new?service=images.ziizii.io")
tokenRequest.requestJWTToken(){
debugPrint("Token aquired. Fetching image...")
imageView.af_setImage(withURLRequest: urlRequest)
}
}
}
Ainsi, cette partie, je suis bien avec. Cela fonctionne, Il met en cache l'objet sur le disque et définit l'image ImageView. Si vous appuyez à nouveau dessus plus tard, il vérifie si l'image est dans le cache et si c'est le cas, applique simplement l'image. Soigné.
Maintenant, une nouvelle exigence pour le projet est de donner à l'utilisateur la possibilité de précharger chaque image et de les mettre en cache. Maintenant, je n'utilise plus l'extension AFI ImageView et utilise plutôt le Downloader. B) Lorsqu'un utilisateur appuie sur une cellule, cette extension ImageView vérifie le même cache pour voir si elle a été préchargée et applique cette image. AFI est assez intelligent pour vérifier le cache pour les données d'image avant d'envoyer la demande, donc je suis sûr que c'est possible.
Ce que j'ai à ce jour pour télécharger les images est ci-dessous:
static var downloader = ImageDownloader.default
static func downloadImage(urlRequest: URLRequestConvertible)
{
self.downloader.download(urlRequest) { response in
switch response.result{
case .success(let image): // If successful, cache the image.
print("SUCCESS")
break
case .failure(let error): // If unsuccessful, remove the cached 404 response and apply a nil image.
print("ERROR: \(response.error)")
break
}
}
}
Si quelqu'un a une idée pour y parvenir ou des conseils utiles ou astuces, ce serait génial! Merci!