SwiftUI:在onAppear调用后,发布者订阅已取消

时间:2019-12-20 11:45:13

标签: swiftui combine publisher observedobject

我有两个使用相同视图模型同步用户的视图。

第一视图包含:

 @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()调用,并且两次都取消了订阅。

0 个答案:

没有答案