// // RemoteImageView.swift // Multihost // // Created by Uldis Zingis on 25/07/2022. // import SwiftUI import Combine struct RemoteImageView: View { @ObservedObject var imageLoader: ImageLoader @State var image: UIImage = UIImage() init(imageURL url: String) { imageLoader = ImageLoader(urlString: url) } var body: some View { Image(uiImage: image) .resizable() .aspectRatio(contentMode: .fill) .onReceive(imageLoader.didChange) { data in self.image = UIImage(data: data) ?? UIImage() } } } class ImageLoader: ObservableObject { var didChange = PassthroughSubject() var data = Data() { didSet { didChange.send(data) } } init(urlString: String) { guard let url = URL(string: urlString) else { return } let task = URLSession.shared.dataTask(with: url) { data, _, _ in guard let data = data else { return } DispatchQueue.main.async { self.data = data } } task.resume() } }