Модификатор onReceive при просмотре срабатывает несколько раз

У меня есть настраиваемый модификатор просмотра, который запускает процесс входа в систему из любого места в приложении.

      private struct Login: ViewModifier {
    @EnvironmentObject var auth: Auth
    @State var isLoginPresented: Bool = false
    @Binding var isActivated: Bool

    func body(content: Content) -> some View {
        content
           .onChange(of: isActivated) {
                guard $0 else { return }
                defer { isActive.toggle() }
                if auth.canAutologin { auth.tryAutologin() }
                else { isLoginPresented.toggle() }
            }
            .onReceive(auth.errorPublisher) {
                if $0 == .cannotAutologin {
                    isLoginPresented.toggle()
                }
            }
            .fullScreenCover(isPresented: $isLoginPresented) {
                LoginView(isPresented: $isLoginPresented)
                    .environmentObject(auth)
            }
    }
}

Проблема в том, что block вызывается один раз для любого представления, к которому применяется модификатор. В результате полноэкранное модальное представление отображается несколько раз. Как я могу решить эту проблему?

0 ответов

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