是否可以在RxSwift中使用Observable <double> .interval?

时间:2016-07-15 08:07:56

标签: ios swift rx-swift

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

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

NSThread.sleepForTimeInterval(2)

subscription.dispose()

现在我需要实现一个Observable<Double>.interval计时器,我想在Observable的subscribeNext调用中使用Double值。

将上述代码更改为Double作为测试后,我发出错误Type Observable<Double> has no member IntegerLiteralType,有人知道如何在RxSwift中实现此功能吗?

2 个答案:

答案 0 :(得分:1)

我不太清楚为什么你会想要一系列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
...

答案 1 :(得分:0)

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.If你想使用double,你可以重写Timer和相关的类。但我不建议重写它。你可以想到另一种方法来做到这一点。