Не удается преобразовать значение типа "(_) -> ()" в ожидаемый тип аргумента "CompletionHandler?" используя KingFisher Swift

Я использую библиотеку под названием KingFisher для загрузки изображений из Интернета. Для справки:

https://github.com/onevcat/Kingfisher

https://cocoapods.org/pods/Kingfisher

imageView.kf.setImage(with: url)

Эта инструкция работает безупречно, но я хотел отследить успех, поэтому я добавил обработчик завершения, поэтому в документации предлагается этот фрагмент.

imageView.kf.setImage(with: userInfo.getImageUrl()){ result in
            switch result {
            case .success(let value):
                print("success")
            case .failure(let error):
                print(error) // The error happens
            }
        }

Для справки это шпаргалка, которую я использую:

https://github.com/onevcat/Kingfisher/wiki/Cheat-Sheet

При добавлении этого фрагмента я получаю эту ошибку компиляции:

Не удается преобразовать значение типа "(_) -> ()" в ожидаемый тип аргумента "CompletionHandler?" (иначе 'Необязательно<(Необязательно, Необязательно, CacheType, Необязательно) -> ()>')

2 ответа

Решение

Swift 4.2 Зимородок 5.1

let url = URL(string: "https://example.com/high_resolution_image.png")
let imageView = UIImageView()
imageView.kf.setImage(with: url, placeholder: nil, options: nil, progressBlock: nil) { result in
    print(result)
    switch result {
    case .success(let value):
        print("success")
        print(value.source.url!)
    case .failure(let error):
        print(error) // The error happens
    }
}

Я использую KingFisher 5.1.0, я не сталкивался с такой ошибкой. Пожалуйста, проверьте ваш подфайл,

под 'Зимородок', '~> 5.1.0'

let url  = URL(string: "your image url")!

 self.kf.setImage(with: url) { result in
       switch result {
            case .success(let value):
                print("Image: \(value.image). Got from: \(value.cacheType)")
            case .failure(let error):
                print("Error: \(error)")
            }
        }

https://github.com/onevcat/Kingfisher/wiki/Cheat-Sheet

если вы используете версию pod ниже 5.0, то, конечно, вы получите

Cannot convert value of type '(_) -> ()' to expected argument type 'CompletionHandler?' (aka 'Optional<(Optional, Optional, CacheType, Optional) -> ()>')

У меня была аналогичная проблема. Я использовал Kingfisher 4.0.0 с Swift 4.

Изменение на следующее помогло,

imageView.kf.setImage(with: url, placeholder: nil, options: nil, progressBlock: nil) { image, error, cacheType, imageURL in

}
Другие вопросы по тегам