protocol PictureDownloaderDelegate : AnyObject { func pictureDownloader ( _ downloader : PictureDownloader , didDownloadImage image : Image ) func pictureDownloader ( _ downloader : PictureDownloader , didFailDownloadWithError error : Error ) } class PictureDownloader { weak var delegate : PictureDownloaderDelegate ? downloadTask ( with : url ) { [ weak self ] ( locationUrl , response , error ) in if let error = error { self ?. downloadTask ( with : url ) { [ weak self ] ( locationUrl , response , error ) in if let error = error { self ?.