Skip to content

Instantly share code, notes, and snippets.

@mwaterfall
Last active June 4, 2018 12:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mwaterfall/d23dfd90f1a19cc569cbf6651392447f to your computer and use it in GitHub Desktop.
Save mwaterfall/d23dfd90f1a19cc569cbf6651392447f to your computer and use it in GitHub Desktop.
extension UIImageView {
func apply(_ imageDescriptor: ImageDescriptor<UIImage>) {
cancelAnyExistingFetches()
accessibilityIdentifier = imageDescriptor.properties.accessibilityIdentifier
backgroundColor = imageDescriptor.properties.backgroundColor
contentMode = imageDescriptor.properties.contentMode
tintColor = imageDescriptor.properties.tintColor
image = imageDescriptor.imageReference
}
func apply(
_ imageDescriptor: ImageDescriptor<URL>,
loading loadingImageDescriptor: ImageDescriptor<UIImage>? = nil,
failure failureImageDescriptor: ImageDescriptor<UIImage>? = nil
) {
cancelAnyExistingFetches()
if let loadingImageDescriptor = loadingImageDescriptor {
apply(loadingImageDescriptor)
}
let imageURL = imageDescriptor.imageReference
fetchImage(with: imageURL) { [weak self] result in
guard let _self = self else {
return
}
switch result {
case .success(let image):
let downloadedImageDescriptor = ImageDescriptor<UIImage>(
imageReference: image,
properties: imageDescriptor.properties
)
_self.apply(downloadedImageDescriptor)
case .failure:
if let failureImageDescriptor = failureImageDescriptor {
_self.apply(failureImageDescriptor)
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment