gpt4 book ai didi

swift - 在WidgetKit中每分钟更新时间文本标签

转载 作者:行者123 更新时间:2023-12-03 09:20:09 32 4
gpt4 key购买 nike

是否可以在Widget中创建显示当前时间并实时更新的文本标签?
尝试创建时钟 WidgetKit ,但 WidgetKit 每5分钟仅更新1次。

  • 创建时间线无济于事
  • “使 WidgetKit 保持最新状态”不适用于当前时间,仅适用于计时器等。
  • 最佳答案

    一个可能的解决方案是使用time日期样式:

    /// A style displaying only the time component for a date.
    ///
    /// Text(event.startDate, style: .time)
    ///
    /// Example output:
    /// 11:23PM
    public static let time: Text.DateStyle
  • 您需要一个具有Entry属性的简单Date:
  • struct SimpleEntry: TimelineEntry {
    let date: Date
    }
  • 每分钟创建一个Entry,直到下一个午夜:
  • struct SimpleProvider: TimelineProvider {
    ...

    func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> Void) {
    var entries = [SimpleEntry]()
    let currentDate = Date()
    let midnight = Calendar.current.startOfDay(for: currentDate)
    let nextMidnight = Calendar.current.date(byAdding: .day, value: 1, to: midnight)!

    for offset in 0 ..< 60 * 24 {
    let entryDate = Calendar.current.date(byAdding: .minute, value: offset, to: midnight)!
    entries.append(SimpleEntry(date: entryDate))
    }

    let timeline = Timeline(entries: entries, policy: .after(nextMidnight))
    completion(timeline)
    }
    }
  • 使用time样式显示日期:
  • struct SimpleWidgetEntryView: View {
    var entry: SimpleProvider.Entry

    var body: some View {
    Text(entry.date, style: .time)
    }
    }

    如果要自定义日期格式,可以使用自己的 DateFormatter:
    struct SimpleWidgetEntryView: View {
    var entry: SimpleProvider.Entry

    static let dateFormatter: DateFormatter = {
    let formatter = DateFormatter()
    formatter.locale = Locale(identifier: "en_US_POSIX")
    formatter.dateFormat = "HH:mm"
    return formatter
    }()

    var body: some View {
    Text("\(entry.date, formatter: Self.dateFormatter)")
    }
    }

    这是一个 GitHub repository,带有不同的 WidgetKit 示例,包括Clock Widget。

    关于swift - 在WidgetKit中每分钟更新时间文本标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64053733/

    32 4 0