Rough sketch of SwiftUI RemoteImage using AlamofireImage

June 8, 2019 ยท View on GitHub

import SwiftUI import Combine import AlamofireImage

let imageDownloader = ImageDownloader( configuration: ImageDownloader.defaultURLSessionConfiguration(), downloadPrioritization: .fifo, maximumActiveDownloads: 4, imageCache: AutoPurgingImageCache() )

extension ImageDownloader { func image(for url: URL) -> AnyPublisher<UIImage?, Never> { return Publishers.Future { subscriber in let urlRequest = URLRequest(url: url) imageDownloader.download(urlRequest) { response in if let image = response.result.value { subscriber(.success(image)) } } } .eraseToAnyPublisher() } }

struct RemoteImage: View { // let placeholder = UIImage(named: "placeholder.jpg")! let url: URL init(url: URL) { print("RemoteImage created (url)") self.url = url }

@State private var image: UIImage? = nil

var body: some View {
    Group {
        if image != nil {
            Image(uiImage: image!)
        } else {
            Image(systemName: "person.crop.circle")
        }
    }
    .bind(imageDownloader.image(for: url), to: $image)
}

}

//#if DEBUG //struct RemoteImage_Previews : PreviewProvider { // static var previews: some View { // RemoteImage() // } //} //#endif