Как обновить текст с помощью таймера в SwiftUI - PullRequest
2 голосов
/ 08 июня 2019

У меня есть текст в поле зрения, теперь я хочу обновлять этот текст с помощью оповещения каждую секунду.

Вот код, который я сделал.

struct CountDownView : View {
    var body: some View {       
        VStack{
            Text("Update text with timer").lineLimit(nil).padding(20)

            }.navigationBarTitle(Text("WWDC"), displayMode:.automatic)
    }
}        

Ответы [ 2 ]

1 голос
/ 09 июля 2019

Использование комбайна:


struct CurrentDateView : View {
    @State var now = Date()

    let timer = Timer.publish(every: 1, on: .current, in: .common).autoconnect()

    var body: some View {
        Text("\(now)")
            .onReceive(timer) {
                self.now = Date()
            }
    }
}

1 голос
/ 08 июня 2019

Мне удалось обновить текст с помощью оповещения.

я объявил дату как State, поэтому всякий раз, когда дата изменяется с помощью текста предупреждения, также обновляется.

struct CountDownView : View {

    @State var nowDate: Date = Date()
    let referenceDate: Date
    var timer: Timer {
        Timer.scheduledTimer(withTimeInterval: 1, repeats: true) {_ in 
            self.nowDate = Date()
        }
    }

    var body: some View {
        Text(countDownString(from: referenceDate))
            .font(.largeTitle)
            .onAppear(perform: {
                _ = self.timer
            })
    }

    func countDownString(from date: Date) -> String {
        let calendar = Calendar(identifier: .gregorian)
        let components = calendar
            .dateComponents([.day, .hour, .minute, .second],
                            from: nowDate,
                            to: referenceDate)
        return String(format: "%02dd:%02dh:%02dm:%02ds",
                      components.day ?? 00,
                      components.hour ?? 00,
                      components.minute ?? 00,
                      components.second ?? 00)
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...