Proyectos de Subversion Iphone Microlearning

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
//
2
//  CustomAsyncImage.swift
3
//  twogetskills
4
//
5
//  Created by Efrain Yanez Recanatini on 3/9/22.
6
//
7
import SwiftUI
8
 
9
struct CustomAsyncImage<Placeholder: View>: View {
10
    @StateObject private var loader: ImageLoader
11
    private let placeholder: Placeholder
12
    private let image: (UIImage) -> Image
13
 
14
    init(
15
        url: URL,
16
        @ViewBuilder placeholder: () -> Placeholder,
17
        @ViewBuilder image: @escaping (UIImage) -> Image = Image.init(uiImage:)
18
    ) {
19
        self.placeholder = placeholder()
20
        self.image = image
21
        _loader = StateObject(wrappedValue: ImageLoader(url: url, cache: Environment(\.imageCache).wrappedValue))
22
    }
23
 
24
    var body: some View {
25
        content
26
            .onAppear(perform: loader.load)
27
    }
28
 
29
    private var content: some View {
30
        Group {
31
            if loader.image != nil {
32
                image(loader.image!)
33
            } else {
34
                placeholder
35
            }
36
        }
37
    }
38
}
39