Swift: Получение таймера виджетов для появления переменной состоянияIOS

Программируем под IOS
Ответить
Anonymous
 Swift: Получение таймера виджетов для появления переменной состояния

Сообщение Anonymous »

В настоящее время имеет таймер, который отсчитывает оставшееся время, пока время не изменится на каждую минуту. Получил отсчет, работающий, но задается вопросом, как получить отсчет, который отображается, чтобы прикрепить переменную @state. Но, честно говоря, так как это виджет, я чувствую, что это может быть невозможно. Код ниже < /p>
struct DigitalClockView: View {
let entry: DigitalClockEntry
let components: DateComponents
let futureDate: Date

var currentTime: String {
let time = entry.date
let timeFormatter = DateFormatter()
timeFormatter.dateFormat = "H:mm"
return timeFormatter.string(from: time)
}

@State var countDown: String = ""

init(entry: DigitalClockEntry) {
self.entry = entry
let difference = 60 - Calendar.current.component(.second, from: entry.date)
self.components = DateComponents(second: difference)
self.futureDate = Calendar.current.date(byAdding: components, to: entry.date)!
}

var body: some View {
VStack(alignment: .center) {
Text(futureDate, style: .timer)
Text(currentTime)

}
}
}

extension Date {
func adding(
_ component: Calendar.Component,
value: Int,
in calendar: Calendar = .current
) -> Self {
calendar.date(byAdding: component, value: value, to: self)!
}
}

//// Provider
struct DigitalClockProvider: TimelineProvider {
private let placeholderEntry = DigitalClockEntry(
date: Date(),
futureDate: Date()
)

func placeholder(in context: Context) -> DigitalClockEntry{
placeholderEntry
}

func getSnapshot(in context: Context, completion: @escaping (DigitalClockEntry) -> ()) {
completion(DigitalClockEntry(date: Date(), futureDate: Date()))
}

func getTimeline(in context: Context, completion: @escaping (Timeline) -> Void) {
let currentDate = Date()
let entryDate = Calendar.current.date(byAdding: .second, value: 60, to: currentDate)!

let entries = [ DigitalClockEntry(date: currentDate, futureDate: entryDate) ]

let timeline = Timeline(entries: entries, policy: .after(currentDate))
completion(timeline)
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... e-variable
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»