我有两个使用相同视图模型同步用户的视图。
第一视图包含:
@ObservedObject var usersViewModel = UsersViewModel()
它具有刷新用户的呼叫
.onAppear {
self.usersViewModel.syncUsers(of: self.companyId)
}
第二个视图包含:
@ObservedObject var viewModel = UsersViewModel()
它具有刷新用户的呼叫
.onAppear {
print("UsersView appear")
self.viewModel.syncUsers(of: self.companyId)
}
因此,如您所见,两个代码段几乎相同。 在两个视图中,我都在属性上实例化ViewModel。 在这两个视图中,我都在onAppear()
中调用sync方法但是在第二种情况下,取消了对sync()方法发出的请求的订阅。
在控制台上查看打印内容,我可以看到: 1.两个视图都两次调用onAppear() 2.似乎在每次刷新时都重新创建了View结构并再次创建了ViewModel()实例 3.如果重新创建ViewModel(),则似乎已取消分配,因此分配给Set的预订 4.但是在第一个视图中,发生的情况是取消了第一个sync()订阅,并且第二个正确执行,而在第二个视图中,有sync()调用,并且两次都取消了订阅。