ドキュメント

ウィジェットに動的な日時を表示する

ウィジェットが実行されていない時でも、最新の日時に基づく情報をウィジェットに表示できます。

最新の英語ドキュメント

Displaying Dynamic Dates in Widgets

概要

Widget Extensionは常時実行されているわけではないため、ウィジェットのコンテンツを直接更新することはできません。代わりにWidgetKitがウィジェットのビューをレンダリングし、結果を表示します。一方で、ウィジェットが表示されている間、継続的に更新されるコンテンツを表示できるSwiftUIビューもあります。

ウィジェットのTextビューを使用して、常に最新の日時を画面に表示できます。以下は利用可能な組み合わせの例です。

自動更新される相対的な時間を表示するには、以下のようにします。


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

relativeスタイルを使用すると、現在の日時と、指定された未来または過去の日時との絶対差が表示されます。offsetスタイルでも現在の日時と指定された日時との差が表示されますが、指定された日時が未来の場合は前にマイナス記号(-)を付けて、過去の場合は前にプラス記号(+)を付けて表示されます。

継続的に自動更新されるタイマーを表示するには、以下のようにします。


let components = DateComponents(minute: 15)
let futureDate = Calendar.current.date(byAdding: components, to: Date())!


Text(futureDate, style: .timer)
// Displays:
// 15:00

timerスタイルは、現在の日時が未来の指定日時に到達するまでカウントダウンし、その日時を過ぎるとカウントアップします。

絶対日時を表示するには、以下のようにします。


// 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

最後に、2つの日時の間の時間差を表示するには、以下のようにします。


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