diff --git a/Sources/SwURL/RemoteImage/RemoteImage.swift b/Sources/SwURL/RemoteImage/RemoteImage.swift index 419b8b5..acf23ab 100644 --- a/Sources/SwURL/RemoteImage/RemoteImage.swift +++ b/Sources/SwURL/RemoteImage/RemoteImage.swift @@ -10,40 +10,43 @@ import Foundation import SwiftUI import Combine - class RemoteImage: ObservableObject { var objectWillChange = PassthroughSubject() - - var request: Cancellable? - - var image: Image? = nil { - willSet { - guard image == nil else { return } - DispatchQueue.main.async { [weak self] in - guard let self = self else { return } - self.objectWillChange.send(self.image) - } - } - } - - func load(url: URL) -> Self { - DispatchQueue.global(qos: .userInitiated) - .async { [unowned self] in - - self.request = ImageLoader.shared.load(url: url) - .map { cgImage -> Image in - SwURLDebug.log(level: .info, message: "Image successfully retrieved from url: " + url.absoluteString) - return Image.init(cgImage, - scale: 1, - label: Text(url.lastPathComponent)) - }.catch { error -> Just in - SwURLDebug.log(level: .warning, message: "Failed to load image from url: " + url.absoluteString + "\nReason: " + error.localizedDescription) - return .init(nil) - }.eraseToAnyPublisher() - .assign(to: \RemoteImage.image, on: self) - } - - return self - } + + var request: Cancellable? + + var image: Image? = nil { + willSet { + guard image == nil else { return } + DispatchQueue.main.async { [weak self] in + guard let self = self else { return } + self.objectWillChange.send(self.image) + } + } + } + + func load(url: URL) -> Self { + request = ImageLoader.shared.load(url: url) + .map { cgImage -> Image in + SwURLDebug.log( + level: .info, + message: "Image successfully retrieved from url: " + url.absoluteString + ) + return Image.init( + cgImage, + scale: 1, + label: Text(url.lastPathComponent) + ) + }.catch { error -> Just in + SwURLDebug.log( + level: .warning, + message: "Failed to load image from url: " + url.absoluteString + "\nReason: " + error.localizedDescription + ) + return .init(nil) + } + .eraseToAnyPublisher() + .assign(to: \RemoteImage.image, on: self) + return self + } }