J'utilise SDWebImage pour télécharger l'image. Je souhaite effectuer d'autres opérations si l'image est téléchargée avec succès.
cell.appIcon.sd_setImage(with: url, placeholderImage: UIImage.init(named: "App-Default"), completed: {(image: UIImage!, error: NSError!, cacheType: SDImageCacheType, imageURL: URL!) -> Void in
// Perform operation.
})
Mais j'obtiens une erreur:
Impossible de convertir la valeur de type '(UIImage !, NSError !, SDImageCacheType, URL!) -> Annulation' en argument de type 'SDExternalCompletionBlock?'
Enfin résolu.
cell.appIcon.sd_setImage(with: url!, placeholderImage: UIImage(named: "App-Default"),options: SDWebImageOptions(rawValue: 0), completed: { (image, error, cacheType, imageURL) in
// Perform operation.
})
Swift 4 version
cell.appIcon.sd_setImage(with: url, placeholderImage: UIImage(named: "App-Default"),options: SDWebImageOptions(rawValue: 0), completed: { image, error, cacheType, imageURL in
// your rest code
})
Important! N'oubliez pas de vous envoyer comme bloqué ou non possédé (comme ceci [self faible]/[moi non possédé]) au bloc, lorsque cela est nécessaire, pour éviter de conserver les cycles.
Exemple:
cell.appIcon.sd_setImage(
with: url,
placeholderImage: UIImage(named: "App-Default"),
options: SDWebImageOptions(rawValue: 0),
completed: { [self weak] image, error, cacheType, imageURL in
guard let selfNotNil = self else { return }
// your rest code
}
)
Selon la typedef
du framework que vous utilisez:
typedef void(^SDExternalCompletionBlock)(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL);
une SDExternalCompletionBlock
est constituée de paramètres facultatifs, comme indiqué par _Nullable
. Votre code devrait donc être écrit comme ceci:
cell.appIcon.sd_setImage(with: url, placeholderImage: UIImage.init(named: "App-Default"), completed: {(image: UIImage?, error: NSError?, cacheType: SDImageCacheType, imageURL: URL?) -> Void in
// Perform operation.
})
Comme le compilateur connaît les types de paramètres du bloc d'achèvement (à partir de la déclaration de fonction), vous pouvez écrire le code de manière plus succincte et (IMO) plus facile à lire comme ceci:
cell.appIcon.sd_setImage(with: url, placeholderImage: UIImage(named: "App-Default"), completed: { (image, error, cacheType, imageURL) in
// Perform operation.
})
Celui-ci fonctionne également avec Swift 3:
cell.appIcon.sd_setImage(with: url, placeholderImage: UIImage(named: "App-Default"), options: []) { (image, error, imageCacheType, imageUrl) in
// Perform your operations here.
}
cell.appIcon.sd_setImage(with: url, placeholderImage: UIImage(named: "App-Default"),options: SDWebImageOptions(rawValue: 0), completed: { (img, err, cacheType, imgURL) in
// code
})
Essayez ceci, espérons que cela fonctionnera bien