我正在使用SwiftUI学习MVVM,并且在取消初始化ViewModel时遇到问题。视图使用ListView来显示ViewModel中的数据。如果我转到ListView行的Detail类,然后返回到ListView,则应用程序将创建数据重复项。 例如:如果一个列表包含100个项目,而我转到列表行的DetailView,然后返回,则现在是200个项目,依此类推。如何停止?
ListView:
var nbColumns = Math.Ceiling( (double)nbItem / nbRow ) ;
ListViewModel:
import SwiftUI
import KingfisherSwiftUI
struct ListView: View {
@ObservedObject var viewModel = ListViewModel()
@State private var searchText = ""
var body: some View {
NavigationView {
VStack {
SearchBar(text: $searchText)
.padding(.top, -30)
List(viewModel.itemsList) { item in
NavigationLink(destination: ListDetail()) {
HStack {
KFImage(URL(string: String(item.thumbnailUrl)))
.resizable()
.frame(width: 80, height: 80)
.padding(EdgeInsets(top: 10, leading: 0, bottom: 10, trailing: 0 ))
}
VStack(alignment: .leading) {
Text(item.title)
.padding(.top, -10)
.padding(.bottom, 10)
Text(item.albumTitle)
.font(.system(size: 12))
.padding(.bottom, 0)
}
.padding(.leading, 10)
.padding(.trailing, 20)
}
}
}
.onAppear {
self.viewModel.fetchPhotos()
}
}
}
}
答案 0 :(得分:1)
避免数据重复的一种方法是将对照片的获取从onAppear
方法转移到init
。所以代替
.onAppear {
self.viewModel.fetchPhotos()
}
这样做
init() {
self.viewModel.fetchPhotos()
}