我有一个有条件地显示子视图的父视图:
struct HomeView: View {
@State var selectedView = true
var body: some View {
VStack {
Picker("Selected", selection: $selectedView) {
Text("A").tag(true)
Text("B").tag(false)
}.pickerStyle(SegmentedPickerStyle())
if selectedView {
SubView()
} else {
Text("Other")
}
}
}
}
我的子视图包含一个AsyncImage从 URL 加载的:
struct SubView: View {
private let url = URL(string: "some url here")
var body: some View {
AsyncImage(url: url)
}
}
我的问题是SubView每次我将选择器切换到 B 然后再切换回 A 时都会重新创建它。这会重新创建AsyncImage并导致从 URL 重新加载,这不是必需的。
有没有办法防止SubView在这里被重新创建?我注意到TabView在它们之间切换时似乎没有重新创建其包含的视图。是否可以使用我拥有的结构获得此功能?
我已经尝试使SubViewequatable 并.equatable()在其实例上使用修饰符,如下所示:
if selectedView {
SubView().equatable()
} else {
Text("Other")
}
但是,图像仍会重新加载。