当达到零时停止 SwiftUI 控件的相对文本字段计数器?



我正在创建一个Widget,它有一个从日期开始倒计时的文本字段,如下所示:

Text(endDate, style: .relative)

这很好,但作为它的相对值,一旦它达到零,它将继续重新计数,因为endDate变成了过去。

有没有一种方法可以在文本为零时终止它?还是我必须用计时器重新构建此功能?

我所需要做的就是从开始日期到结束日期倒计时,然后使文本字段无效或显示消息。

以下是如何创建倒计时以及当时间结束时显示其他文本。

  1. 创建一个条目,其中endDate是可选的-如果是nil,则表示倒计时结束:
struct SimpleEntry: TimelineEntry {
let date: Date
var endDate: Date?
}
  1. 在您的提供者中创建两个条目-一个用于倒计时时间,另一个用于倒计时结束时:
struct SimpleProvider: TimelineProvider {
...
func getTimeline(in context: Context, completion: @escaping (Timeline<SimpleEntry>) -> Void) {
let currentDate = Date()
let endDate = Calendar.current.date(byAdding: .second, value: 15, to: currentDate)!
let entries = [
SimpleEntry(date: currentDate, endDate: endDate),
SimpleEntry(date: endDate),
]
let timeline = Timeline(entries: entries, policy: .never)
completion(timeline)
}
}
  1. 在视图中使用它:
struct WidgetEntryView: View {
var entry: Provider.Entry
var body: some View {
if let endDate = entry.endDate {
Text(endDate, style: .relative)
} else {
Text("Timer finished")
}
}
}

我认为您必须在时间零点安排小部件更新,并有条件在小于零点时隐藏它。

最新更新