Таймер при получении не работает внутри NavigationView - PullRequest
1 голос
/ 23 апреля 2020

У меня есть следующий таймер:

struct ContentView: View {
    @State var timeRemaining = 10
    let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()

    var body: some View {
        NavigationView{
            VStack {
                if(self.timeRemaining > 0) {
                    Text("\(timeRemaining)")
                        .onReceive(timer) { _ in
                            if self.timeRemaining > 0 {
                                self.timeRemaining -= 1
                            }
                    }
                } else {
                    Text("Time is up!")
                }
            }
        }
    }
}

Если я удаляю представление NavigationView, таймер обновляется и работает, но так не работает, что здесь происходит и как я могу обновить это пока в NavigationView? Или есть лучшая практика?

Спасибо

1 Ответ

0 голосов
/ 23 апреля 2020

Лучше присоединять наблюдателей к безусловным представлениям, например

    var body: some View {
        NavigationView{
            VStack {
                if(self.timeRemaining > 0) {
                    Text("\(timeRemaining)")
                } else {
                    Text("Time is up!")
                }
            }
            .onReceive(timer) { _ in        // << to VStack
                if self.timeRemaining > 0 {
                    self.timeRemaining -= 1
                }
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...