2
votes

Kingfisher: Utilisation ambiguë de 'setBackgroundImage (avec: for: placeholder: options: progressBlock: completionHandler :)'

J'ai essayé d'utiliser Kingfisher pour définir l'image d'arrière-plan d'un bouton, mais j'obtiens une erreur de compilation rapide:

Utilisation ambiguë de 'setBackgroundImage (avec: for: placeholder: options: progressBlock: completionHandler :)'

Et cette expression est-elle ambiguë? J'ai regardé la documentation KF et je pense que c'est ainsi que vous l'appelez.

var options: KingfisherOptionsInfo = []
options.append(.forceRefresh)
button.kf.setBackgroundImage(with: URL(string: picture), for: .normal, placeholder: nil, options: options, progressBlock: nil, completionHandler: nil)


2 commentaires

quelle version martin-pêcheur et swift?


Swift 4.2, martin-pêcheur 5.0.1


4 Réponses :


4
votes

Cette erreur est due au fait que vous devez gérer le completionHandler au lieu de passer nil . Essayez le code ci-dessous:

button.kf.setBackgroundImage(with: URL(string: picture), for: .normal, placeholder: nil, options: options, progressBlock: nil) { result in
    // result is either a .success(RetrieveImageResult) or a .failure(KingfisherError)
    switch result {
    case .success(let value):
        // The image was set to image view:
        print(value.image)

        // From where the image was retrieved:
        // - .none - Just downloaded.
        // - .memory - Got from memory cache.
        // - .disk - Got from disk cache.
        print(value.cacheType)

        // The source object which contains information like `url`.
        print(value.source)

    case .failure(let error):
        print(error) // The error happens
    }
}


1 commentaires

nous pouvons supprimer ce paramètre que nous devons passer nil wen appel de fonction, puis l'erreur disparaîtra - a fonctionné pour moi.



2
votes

J'ai eu le même problème et je l'ai résolu en supprimant simplement les paramètres nil dans l'appel de fonction.

 imgBanner.kf.setImage(with: url , placeholder:#imageLiteral(resourceName: "landscape.png"))

avec

imgBanner.kf.setImage(with: url , placeholder:#imageLiteral(resourceName: "landscape.png"), options: nil, progressBlock: nil, completionHandler: nil) 

p >


0 commentaires

0
votes

Pour Swift 5

remplacez votre ligne par ceci.

videoImageView.kf.setImage(with: resource, placeholder: nil, options: [.transition(.fade(0)), .processor(p)], progressBlock: nil) { (result) in
                
}


0 commentaires

0
votes

Je l'ai résolu en supprimant l'appel de fonction des paramètres inutilisés (où nous passons nil ) et en important Kingfisher.

Étape 1 . importer Kingfisher

Étape 2 . button.kf.setBackgroundImage (avec: URL (string: urlString), pour: .normal, options: options)


0 commentaires