我正在尝试创建一个调度程序以使用一些数据。

调度程序必须能够:

  • 每次应手动使用数据时发送一个事件
  • 在上一次使用
  • 后经过一段时间后,每次应自动使用数据时发送一个事件

    我已经使用MutableProperty对手动消费进行了建模
     let consume = MutableProperty<Void>()
    

    我正在尝试使用SignalProducer对自动消费进行建模
     let timer = SignalProducer<Void, NoError>
    

    通过结合这两个生产者的最新值,我可以第一次使用该数据
    SignalProducer.combineLatest(consume.producer, timer)
        .take(first: 1)
        .map() { _ in return () }
    

    通过这种方式,生产者将通过手工消耗或自动消耗来发送值。

    我不知道我将如何永久地做到这一点。

    有人可以帮忙吗?

    最佳答案

    您可以使用ReactiveSwift中定义的全局计时器功能来启动计时器

    public func timer(interval: TimeInterval, on scheduler: DateSchedulerProtocol) -> SignalProducer<Date, NoError>
    

    要将计时器与消耗属性结合使用:
    let interval = 10.0
    let timerSignal: SignalProducer<Date, NoError> = timer(interval: interval, on: QueueScheduler.main)
    let consume = MutableProperty<Void>()
    
    timerSignal.combineLatest(with: consume.producer).startWithValues { (date, v) in
        print("triggered at time: \(date)")
    }
    

    这样,您可以通过在consumption上设置value属性或等待timer事件来手动触发打印块。

    09-26 22:53
    查看更多