Неоднозначное использование `setImageWith(_: placeholderImage: usingActivityIndicatorStyle:)` в Swift 3

#swift3 #sdwebimage

#swift3 #sdwebimage

Вопрос:

Этот код отлично работает в Swift 2.3, но при обновлении до Swift 3.0 компилятор жалуется на неоднозначное использование.

 imgProfilePhoto?.setImageWith((URL(string: profileurl)), placeholderImage: UIImage(named: "PatientDefaultProfilePic"), usingActivityIndicatorStyle:UIActivityIndicatorViewStyle.gray)
  

Комментарии:

1. Попробуйте переписать метод, который Xcode предложит вам для правильного способа реализации в Swift 3

Ответ №1:

Swift 4

 import SDWebImage
extension UIImageView {

@objc func setImageWithIndicator(urlStr: String?, placeholder: UIImage) {
    guard let _ = urlStr, let url = URL(string: urlStr!) else {
        image = placeholder
        return
    }
    sd_setIndicatorStyle(.gray)
    sd_addActivityIndicator()
    sd_setImage(with: url, placeholderImage: placeholder, options: .refreshCached, completed: nil)
}}
  

Swift 3

 imageView.sd_setImage(with: URL(string: ""), placeholderImage: UIImage(named: ""))
imageView.setShowActivityIndicator(true)
imageView.setIndicatorStyle(.gray)
  

Ответ №2:

Эквивалентный метод Swift работает как замена этого метода из SDWebImage :

 imgProfilePhoto?.sd_setImageWithIndicator(with: URL(string: profileurl), placeholderImage: UIImage(named: "PatientDefaultProfilePic"))
  

Ответ №3:

Эта строка также сработала для меня:

Добавьте обработчик завершения nil.

 imgView.setImageWith(imgUrl, completed: nil, usingActivityIndicatorStyle: .gray)