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(), и подписка отменяется и раз.

0 ответов

Другие вопросы по тегам