Kingfisher: неоднозначное использование setBackgroundImage(with:for:placeholder:options:progressBlock:completionHandler:)'

Я пытался использовать Kingfisher для установки фонового изображения кнопки, но я получаю быструю ошибку компилятора:

Неоднозначное использование setBackgroundImage(with:for:placeholder:options:progressBlock:completionHandler:)'

Что в этом выражении двусмысленно? Я посмотрел документацию KF и думаю, что вы так это называете.

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

person rma    schedule 05.01.2019    source источник
comment
какие версии зимородка и свифта?   -  person Sh_Khan    schedule 05.01.2019
comment
Свифт 4.2, зимородок 5.0.1   -  person rma    schedule 05.01.2019


Ответы (5)


Эта ошибка связана с тем, что вам нужно обрабатывать completionHandler вместо передачи nil. Попробуйте код ниже:

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
    }
}
person M Reza    schedule 05.01.2019
comment
мы можем удалить этот параметр, который мы должны передать при вызове функции nil wen, тогда ошибка исчезнет - у меня сработало. - person Yodagama; 30.07.2020

У меня была такая же проблема, и я решил ее, просто удалив нулевые параметры в вызове функции.

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

с

 imgBanner.kf.setImage(with: url , placeholder:#imageLiteral(resourceName: "landscape.png"))
person Prasad Nesargi    schedule 24.10.2019

Для Swift 5

замените свою строку на эту.

videoImageView.kf.setImage(with: resource, placeholder: nil, options: [.transition(.fade(0)), .processor(p)], progressBlock: nil) { (result) in
                
}
person Bijender Singh Shekhawat    schedule 15.07.2020
comment
Работа для меня ...... - person M Hamayun zeb; 30.06.2021

Я решил эту проблему, удалив вызов функции из неиспользуемых параметров (где мы передаем nil) и импортировав Kingfisher.

Шаг 1. import Kingfisher

Шаг 2. button.kf.setBackgroundImage(with: URL(string: urlString), for: .normal, options: options)

person Yodagama    schedule 30.07.2020

Это работает для меня очень простое исправление, используйте URL(string: url) вместо просто строки url Требуется Xcode для конкретного типа

cell.imgView.kf.setImage(
            with: URL(string: url),
            placeholder: UIImage(named: "dummyaadhar"),
            options: [
                .processor(processor),
                .scaleFactor(UIScreen.main.scale),
                .transition(.fade(1)),
                .cacheOriginalImage
            ])
person Vishal Shelake    schedule 16.07.2021