SwiftUI: подписка издателя отменена после вызова onAppear
У меня есть два представления, которые используют одну и ту же модель представления для синхронизации пользователей.
Первый просмотр содержит:
@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(), отменяется.
Глядя на распечатки на консоли, я вижу, что: 1. Оба представления вызывают onAppear() 2 раза 2. Кажется, структура представления воссоздается, и экземпляр ViewModel() создается снова при каждом обновлении 3. Если ViewModel() воссоздается, он кажется, что он освобожден, поэтому подписки присвоены набору 4. Но в первом представлении это происходит так, что первая подписка sync() отменяется, а вторая выполняется правильно, тогда как во втором представлении есть вызовы sync(), и подписка отменяется и раз.