我有一个有条件地显示子视图的父视图:
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
在它们之间切换时似乎没有重新创建其包含的视图。是否可以使用我拥有的结构获得此功能?
我已经尝试使SubView
equatable 并.equatable()
在其实例上使用修饰符,如下所示:
if selectedView {
SubView().equatable()
} else {
Text("Other")
}
但是,图像仍会重新加载。