Не удается преобразовать значение типа "(_) -> ()" в ожидаемый тип аргумента "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
}