Here you go, an extension for separating loading/error images. loadingImage will be what SDWebImage called placeholderImage. errorImage will be the real placeholder when loading went wrong.
import Foundation
import SDWebImage
extension UIImageView {
/// Separated loader and error images, short version.
func zap_setImage(with url: URL?, loadingImage: UIImage?, errorImage: UIImage) {
self.zap_setImage(with: url, loadingImage: loadingImage, errorImage: errorImage, completed: nil)
}
/// Separated loader and error images, long version.
func zap_setImage(with url: URL?, loadingImage: UIImage?, errorImage: UIImage, completed: SDExternalCompletionBlock?) {
self.sd_setImage(with: url, placeholderImage: loadingImage, options: []) { [weak self] (uiimage: UIImage?, error: Error?, sdimagecachetype: SDImageCacheType, usedurl: URL?) in
//print("ISSUE1688 uiimage: \(String(describing: uiimage)), error: \(String(describing: error))")
let setErrorImage: Bool
switch error {
case .none:
// No error?
if uiimage == nil {
// No error, but no image, so use error image
setErrorImage = true
}
else {
setErrorImage = false
}
break
case .some(_):
// case .some(let errorvalue):
// Error?
//print("ISSUE1688 errorvalue: \(errorvalue)")
setErrorImage = true
break
}
//print("ISSUE1688 setErrorImage: \(setErrorImage)")
if setErrorImage {
self?.image = errorImage
}
if let c = completed {
c(uiimage, error, sdimagecachetype, usedurl)
}
}
}
}