问题
I have text in view now i want to update that text using alert on every second.
Here is code i have done.
struct CountDownView : View {
var body: some View {
VStack{
Text("Update text with timer").lineLimit(nil).padding(20)
}.navigationBarTitle(Text("WWDC"), displayMode:.automatic)
}
}
回答1:
Using Combine:
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()
}
}
}
回答2:
i have managed to update text using alert.
i have declared date as State so whenever date is changed using alert text will also get updated.
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)
}
}
来源:https://stackoverflow.com/questions/56504410/how-to-update-text-using-timer-in-swiftui