您好我在这里有一个问题,到目前为止我在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中实现此功能吗?
答案 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和相关的类。但我不建议重写它。你可以想到另一种方法来做到这一点。