Reputation: 23
import SwiftUI
struct FRemoteImage: View {
@ObservedObject var imageLoader = ImageLoader()
var placeholder:Image
init(url: String, placeholder: Image = Image(systemName: "photo")) {
self.placeholder = placeholder
imageLoader.fetchImage(url: url)
}
var body: some View {
if let image = self.imageLoader.downloadImage {
return Image(uiImage: image)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 55, height: 60, alignment: .center)
}
return placeholder
}
}
struct FRemoteImage_Previews: PreviewProvider { static var previews: some View { FRemoteImage(url: "") } }
Upvotes: 1
Views: 1384
Reputation: 52312
body
in a SwiftUI is a ViewBuilder
(which is a type of ResultBuilder
), which has some special properties. To take advantage of it, you'll want to remove your explicit return
statements and let it return a view hierarchy implicitly instead:
var body: some View {
if let image = self.imageLoader.downloadImage {
Image(uiImage: image) //<-- This gets returned
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 55, height: 60, alignment: .center)
} else {
placeholder //<-- or, this gets returned
}
}
Upvotes: 4