improve Pokedex demo

This commit is contained in:
John Estropia
2020-08-29 20:02:05 +09:00
parent 1db91fcec3
commit 1c735a9228
18 changed files with 820 additions and 426 deletions

View File

@@ -46,67 +46,6 @@ struct NetworkImageView: View {
// MARK: Private
@ObservedObject
private var imageDownloader: ImageDownloader
// MARK: - NetworkImageView.ImageDownloader
fileprivate final class ImageDownloader: ObservableObject {
// MARK: FilePrivate
private(set) var image: UIImage?
let url: URL?
init(url: URL?) {
self.url = url
guard let url = url else {
return
}
if let image = Self.cache[url] {
self.image = image
}
}
func fetchImage() {
guard let url = url else {
return
}
if let image = Self.cache[url] {
self.objectWillChange.send()
self.image = image
return
}
self.cancellable = URLSession.shared
.dataTaskPublisher(for: url)
.receive(on: DispatchQueue.main)
.sink(
receiveCompletion: { _ in },
receiveValue: { output in
if let image = UIImage(data: output.data) {
Self.cache[url] = image
self.objectWillChange.send()
self.image = image
}
}
)
}
// MARK: Private
private static var cache: [URL: UIImage] = [:]
private var cancellable: AnyCancellable?
}
private var imageDownloader: ImageDownloader
}