我有这样的结构
contentView {
navigationView{
foreach {
NavigationLink(ViewA(id: id))
}
}
}
///其中视图A包含一个请求触发器在视图中出现
struct ViewA: View {
@State var filterString: String = ""
var id: String!
@ObservedObject var model: ListObj = ListObj()
init(id: String) {
self.id = id
}
var body: some View {
VStack {
SearchBarView(searchText: $filterString)
List {
ForEach(model.items.filter({ filterString.isEmpty || $0.id.contains(filterString) || $0.name.contains(filterString) }), id: \.id) { item in
NavigationLink(destination: ViewB(id: item.id)) {
VStack {
Text("\(item.name) ")
}
}
}
}
}
.onAppear {
self.model.getListObj(id: self.id) //api request, fill data and call objectWillChange.send()
}
}
}
}
ViewB 和 ViewB 有相同的代码,接收 id,存储,请求 api 来收集数据。
但是 viewB 列表没有被刷新。我也注意到了viewB的
@ObservedObject var model: model = model()
是多次实例化的
调试时,我发现每个 navigationLink 实例都是它的目的地,甚至在它被触发之前。这通常不是问题,
但就我而言,我觉得 ViewB 模型被实例化了 2 次,而我的 onApear 调用了错误的模型,这是 self.objectWillChange.send() 不刷新视图的原因