[英]How to get UIImage from AnyPublisher<UIImage?, Never> Swift 5 (Combine framework)
我试图弄清楚如何在带有 UIImageView 的Swift 中使用可重用图像缓存。 我试图简单地将 ImageLoader() 变量的实际图像分配给 UIImageView,以便我可以将其用作 UIImage。
代码:
let loader = ImageLoader()
myImage.image = loader.loadImage(from: myUrl)
也许:
loader.loadImage(from: myUrl)
myImage.image = loader(image)
但这给出了一个无法调用非函数类型“ImageLoader”错误的值
代码:
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()
}
}
您正在尝试将发布者结果设置为 ImageView。 你需要使用这样的东西:
class SomeTestClass {
let imageView = UIImageView()
var subscriptions = Set<AnyCancellable>()
func loadImage() {
ImageLoader().loadImage(from: URL(string: "someURL")!).sink { (image) in
self.imageView.image = image
}.store(in: &subscriptions)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.