Я пытаюсь понять, как использовать Многоразовый кэш изображений в Swift с UIImageView. Я пытаюсь просто присвоить фактическое изображение переменной ImageLoader () для UIImageView, чтобы я мог использовать его как UIImage.
Код:
let loader = ImageLoader()
myImage.image = loader.loadImage(from: myUrl)
возможно :
loader.loadImage(from: myUrl)
myImage.image = loader(image)
Но это приводит к невозможности вызова значения нефункционального типа 'ImageLoader' error
Код:
final class ImageLoader {
private let cache = ImageCache()
func loadImage(from url: URL) -> AnyPublisher<UIImage?, Never> {
if let image = cache[url] {
return Just(image).eraseToAnyPublisher()
}
return URLSession.shared.dataTaskPublisher(for: url)
.map { UIImage(data: $0.data) }
.catch { error in return Just(nil) }
.handleEvents(receiveOutput: {[unowned self] image in
guard let image = image else { return }
self.cache[url] = image
})
.subscribe(on: DispatchQueue.global(qos: .background))
.receive(on: RunLoop.main)
.eraseToAnyPublisher()
}
}