如何解决零时停止SwiftUI窗口小部件的相对文本字段计数器吗?
我正在创建一个具有文本字段的窗口小部件,该文本字段从这样的日期开始倒计时:
Text(endDate,style: .relative)
这很好用,但是相对而言,一旦它达到零,它将随着endDate成为过去而继续重新计数。
有没有办法在文本为零时终止文本?还是我必须使用计时器来重建此功能?
我要做的就是从开始日期到结束日期倒数,然后使文本字段无效或显示一条消息。
解决方法
您可以在这里创建倒计时,并在时间结束时显示其他一些文字。
- 创建一个条目,其中
endDate
是可选的-如果它是nil
,则表示倒计时结束:
struct SimpleEntry: TimelineEntry {
let date: Date
var endDate: Date?
}
- 在您的提供者中创建两个条目-一个用于 countdown 时间,另一个用于结束倒计时:
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)
}
}
- 在您的视图中使用它:
struct WidgetEntryView: View {
var entry: Provider.Entry
var body: some View {
if let endDate = entry.endDate {
Text(endDate,style: .relative)
} else {
Text("Timer finished")
}
}
}
,
我认为您必须在零时安排小部件更新,并有条件在小于零时将其隐藏。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。