在这个项目中,我们将从远程 URL 加载图像并实施缓存以防止我们的应用程序一遍又一遍地发出网络请求。
我们知道 SwiftUI 目前不允许这样的事情,
Image("https://url-of-image")
让我们开始了解如何实现上述功能。我会将定义分为三个不同的文件,以使代码更具可读性。
ContentView — 这是您将远程 URL 传递给 ImageView 的视图。
ImageView — 从 URL 渲染图像
ImageModel — 图像获取和缓存逻辑。
让我们仔细看看这三个文件,
内容视图:
我们只是在此处向屏幕添加图像
struct ImageContentView : View {
@State var url = "https://link-to-image"
var body: some View {
VStack {
ImageView(url: url)
}
}
Image View:
struct ImageUrlView: View {
@ObservedObject var remoteImageModel: RemoteImageModel
init(url: String?) {
remoteImageModel = RemoteImageModel(imageUrl: imageUrl)
}
var body: some View {
Image(uiImage: remoteImageModel.image ?? UIImage(named: "default-image-here")!)
.resizable()
}
}