【发布时间】:2021-07-28 21:46:59
【问题描述】:
我创建了一个自定义视图 NetworkImage,用于异步加载图像。
import Combine
import SwiftUI
struct NetworkImage<Placeholder: View>: View {
@StateObject private var viewModel = NetworkImageViewModel()
let url: String?
let placeholder: Placeholder
let saveLocally:Bool
init(_ url: String?, @ViewBuilder placeholder: () -> Placeholder, saveLocally:Bool = false) {
self.url = url
self.placeholder = placeholder()
self.saveLocally = saveLocally
}
func loadImage(_ url:String?) {
if let url = url {
viewModel.loadImage(from: url, saveLocally: saveLocally)
}
}
var body: some View {
Group {
if let uiImage = viewModel.image {
Image(uiImage: uiImage)
.resizable()
} else {
placeholder
}
}
.onAppear {
if let url = url {
viewModel.loadImage(from: url, saveLocally: saveLocally)
}
}
}
}
我在我的观点中使用了它,它工作得非常好。但是现在我希望能够在每次 url 更改时用新图像替换图像。 我怎样才能做到这一点?如何将我的视图视图模型的 @Published 属性传递给此 NetworkImage 视图并使其工作?
谢谢
【问题讨论】: