Выполнить код в указанное c время суток, используя Combine - PullRequest
0 голосов
/ 04 февраля 2020

Моя цель - использовать Combine для запуска кода в указанное c время суток. В приведенном ниже коде я использую Combine для обновления текстового представления SwiftUI при срабатывании таймера. Я бы хотел, чтобы текстовое представление обновлялось в указанное c время суток, а не при срабатывании таймера. Я полагаю, что NotificationCenter можно использовать для этой цели, но я не совсем уверен, как это сделать, так как не хватает документации.

Можете ли вы решить эту проблему и использовать Центр уведомлений для обновления текстового представления в определенное время дня (например, 18:00)?

import SwiftUI

struct ContentView: View {

    let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()

    @State private var counter = 0


    var body: some View {

        Text("The time is now \(counter)")
            .onReceive(timer) { time in
                if self.counter == 30 {
                    self.timer.upstream.connect().cancel()
                }
                    self.counter += 1
        }
    }
}

1 Ответ

0 голосов
/ 04 февраля 2020

Поскольку вы хотите что-то сделать, даже если ваше приложение не на переднем плане, вам необходимо использовать инфраструктуру UserNotifications .

Чтение «Локальное планирование уведомлений из вашего приложения» .

Базовая c сводка:

  • Создать UNMutableNotificationContent.
  • Создать UNCalendarNotificationTrigger.
  • Создайте UNNotificationRequest, используя содержимое и триггер.
  • Добавьте запрос к UNUserNotificationCenter.
...