Как создать дату расписания? - PullRequest
0 голосов
/ 27 октября 2019

Я пытаюсь создать планировщик даты, чтобы наблюдать какое-то событие. Но это не работает. Я просмотрел

протокол DateScheduler

и сказано, что действие будет происходить при currentDate в некоторыхметоды протокол DateScheduler . Я пытаюсь сделать это через 10 сек. Ниже приведен пример моего пользовательского расписания.

class SomeDateScheduler : DateScheduler {
var currentDate: Date
init() {
    self.currentDate = Date(timeIntervalSinceNow: 10)
}

func schedule(after date: Date, action: @escaping () -> Void) -> Disposable? {
    print(#function)
    print(date)
    return nil
}

func schedule(after date: Date, interval: DispatchTimeInterval, leeway: DispatchTimeInterval, action: @escaping () -> Void) -> Disposable? {
    print(#function)
    print(date)
    print(interval)
    print(leeway)
    return nil
}

func schedule(_ action: @escaping () -> Void) -> Disposable? {
    print(#function)
    return nil
}

}

и затем я создаю привязку для наблюдения за событием

private func testSchedular() {
    let schedular = SomeDateScheduler()

    reactive.makeBindingTarget { appDeleg, value in
        print("SUCCESS")
        print(value)
        } <~ signalSchedular.observe(on: schedular)

    DispatchQueue.main.async { [observerSchedular] in
        observerSchedular.send(value: "Hello World")
        observerSchedular.sendCompleted()
    }
}

Я делаю это в AppDelegate . ObserverSchedular и signalSchedular являются глобальными свойствами. Пожалуйста, объясните мне, как вызывать все методы DateScheduler .

1 Ответ

0 голосов
/ 28 октября 2019

Я уже понял, где я допустил ошибку. Чтобы это исправить я сделал следующее:

  1. Создан кастом observe(on: Schedular). Так это выглядело так: enter image description here

  2. Создана привязка для наблюдения в didFinishLaunchingWithOptions

    reactive.makeBindingTarget { appDeleg, value in
        print("SUCCESS")
        print(value)
        } <~ signalSchedular.customObserve(on: schedular, interval: 10, leeway: 1)
    
  3. И имитация асинхроннойкод enter image description here
  4. Определенные глобальные свойства private let (signalSchedular, observerSchedular) = Signal<String, Never>.pipe(), let schedular = SomeDateScheduler()
  5. Измененная пользовательская дата расписания enter image description here
...