Мое решение обновлять виджет каждую минуту в 0 секунд. Используйте это расширение, чтобы получить текущее время с 0 секундами минуты.
extension Date {
var zeroSeconds: Date? {
let calendar = Calendar.current
let dateComponents = calendar.dateComponents([.year, .month, .day, .hour, .minute], from: self)
return calendar.date(from: dateComponents)
}}
и используйте эту функцию getTimeline
func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
var entries: [SimpleEntry] = []
// Generate a timeline consisting of five entries an hour apart, starting from the current date.
let date = Date().zeroSeconds!
for hourOffset in 0 ..< 60 {
let entryDate = Calendar.current.date(byAdding: .minute , value: hourOffset, to: date)!
print(entryDate)
let entry = SimpleEntry(date: entryDate)
entries.append(entry)
}
let timeline = Timeline(entries: entries, policy: .atEnd)
completion(timeline)
}
simpleEntry такой же, как пример по умолчанию из Xcode
struct SimpleEntry: TimelineEntry {
let date: Date}
и то же тело
var body: some View {
Text(entry.date, style: .time) }
Итак, теперь у вас есть виджет, который обновляется каждую минуту без задержки.
person
Vlad Bruno
schedule
26.04.2021
.after(1 minute)
. Вы просто получаете фактическую дату каждого выполнения вместо того, чтобы использовать для этого таймер. - person Itay Brenner   schedule 24.09.2020