【问题标题】:Is it possible to use Observable<Double>.interval in RxSwift?是否可以在 RxSwift 中使用 Observable<Double>.interval ?
【发布时间】:2016-08-31 22:47:57
【问题描述】:

您好,我有一个问题,到目前为止我在 RxSwift 上找到的所有文档都使用如下可观察间隔:

let subscription = Observable<Int>.interval(0.3, scheduler: scheduler)
    .subscribe { event in
        print(event)
    }

NSThread.sleepForTimeInterval(2)

subscription.dispose()

现在我需要实现一个Observable&lt;Double&gt;.interval 计时器,我想在 Observable 的 subscribeNext 调用中设置一个 Double 值。

将上面的代码更改为Double作为测试后,我有一个错误说Type Observable&lt;Double&gt; has no member IntegerLiteralType,有人知道如何在RxSwift中实现吗?

【问题讨论】:

  • 下面的答案不能回答你的问题吗?

标签: ios swift rx-swift


【解决方案1】:
extension Observable where Element : SignedIntegerType {
    /**
    Returns an observable sequence that produces a value after each period, using the specified scheduler to run timers and to send out observer messages.

    - seealso: [interval operator on reactivex.io](http://reactivex.io/documentation/operators/interval.html)

    - parameter period: Period for producing the values in the resulting sequence.
    - parameter scheduler: Scheduler to run the timer on.
    - returns: An observable sequence that produces a value after each period.
    */
    @warn_unused_result(message="http://git.io/rxs.uo")
    public static func interval(period: RxTimeInterval, scheduler: SchedulerType)
        -> Observable<E> {
        return Timer(dueTime: period,
            period: period,
            scheduler: scheduler
        )
    }
}

元素类型是SignedIntegerType。所以你不能使用 Double 。如果你想使用 double ,你可以重写 Timer 和相关的类。但我不建议重写它。你可以考虑另一种方式来做。

【讨论】:

【解决方案2】:

我不太清楚你为什么需要一系列Double 值,因为该值只是告诉你间隔已经过去了多少次(它不会告诉你已经过去了多少时间)。所以值是Int 是有道理的。

但如果你真的想要一个Double 值序列,你可以轻松地将Int 序列映射到Double 序列:

_ = Observable<Int>.interval(0.4, scheduler: MainScheduler.instance)
        .map { Double($0) }
        .subscribeNext { value in
            print(value)
        }
        .addDisposableTo(disposeBag)

哪些打印:

1.0
2.0
3.0
4.0
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多