概览
因为小组件扩展不会一直运行,所以你无法直接更新小组件的内容。WidgetKit 会代你渲染小组件的视图并显示结果。但那些在小组件显示时继续更新的内容,也可以借助某些 SwiftUI 视图来呈现。
使用小组件中的文本
视图,可以在屏幕上显示最新的日期和时间。下面的示例显示了可用的组合。
要显示自动更新的相对时间:
let components = DateComponents(minute: 11, second: 14)
let futureDate = Calendar.current.date(byAdding: components, to: Date())!
Text(futureDate, style: .relative)
// Displays:
// 11 min, 14 sec
Text(futureDate, style: .offset)
// Displays:
// -11 minutes
使用相对
样式显示当前日期和时间与指定日期之间的绝对差异,无论日期是在未来还是过去。偏移
样式显示当前日期和时间与指定日期之间的差异,用减号 (-
) 前缀表示未来的日期,用加号 (+
) 前缀表示过去的日期。
要显示持续自动更新的计时器:
let components = DateComponents(minute: 15)
let futureDate = Calendar.current.date(byAdding: components, to: Date())!
Text(futureDate, style: .timer)
// Displays:
// 15:00
对于未来的日期,计时器
样式会进行倒计时,直到当前时间达到指定的日期和时间,对于过去的日期则进行正计时。
要显示绝对日期或时间:
// Absolute Date or Time
let components = DateComponents(year: 2020, month: 4, day: 1, hour: 9, minute: 41)
let aprilFirstDate = Calendar.current(components)!
Text(aprilFirstDate, style: .date)
Text("Date: \(aprilFirstDate, style: .date)")
Text("Time: \(aprilFirstDate, style: .time)")
// Displays:
// April 1, 2020
// Date: April 1, 2020
// Time: 9:41AM
最后,要显示两个日期之间的时间间隔:
let startComponents = DateComponents(hour: 9, minute: 30)
let startDate = Calendar.current.date(from: startComponents)!
let endComponents = DateComponents(hour: 14, minute: 45)
let endDate = Calendar.current.date(from: endComponents)!
Text(startDate ... endDate)
Text("The meeting will take place: \(startDate ... endDate)")
// Displays:
// 9:30AM-2:45PM
// The meeting will take place: 9:30AM-2:45PM