28 lines
551 B
Swift
28 lines
551 B
Swift
import SwiftUI
|
|
|
|
struct RemoteImage<Placeholder: View>: View {
|
|
@StateObject private var loader: ImageLoader
|
|
private let placeholder: Placeholder
|
|
|
|
init(url: URL, @ViewBuilder placeholder: () -> Placeholder) {
|
|
self.placeholder = placeholder()
|
|
_loader = StateObject(wrappedValue: ImageLoader(url: url))
|
|
}
|
|
|
|
var body: some View {
|
|
content
|
|
.onAppear(perform: loader.load)
|
|
}
|
|
|
|
private var content: some View {
|
|
Group {
|
|
if loader.image != nil {
|
|
Image(uiImage: loader.image!)
|
|
.resizable()
|
|
} else {
|
|
placeholder
|
|
}
|
|
}
|
|
}
|
|
}
|