[英]change throttle parameter dynamically
在运行时是否可以动态更改节气门参数(在本例中为“ 30”)? 还是我必须使用新的油门时间来创建新的订阅?
let disposable = Observable.combineLatest(objectA.asObservable().skip(1),
objectB.asObservable().skip(1))
.throttle(30,
scheduler: ConcurrentDispatchQueueScheduler(qos: .background))
.subscribe(onNext: { [unowned self] _ in
self.update()
})
我的解决方案是处理当前订阅,并使用新的所需节流时间创建一个新订阅。 但是有更好的解决方案吗?
RxSwift的功能性,声明性性质倾向于根据需要使用新参数创建新的可观察项/订阅,而不是动态更改现有可观察项的节流参数。
例如,使您的可观察功能设置油门间隔。
func throttled(with interval: Double) -> Observable<({TYPE_OF_A}, {TYPE_OF_B})>
{
let scheduler = ConcurrentDispatchQueueScheduler(qos: .default)
return Observable
.combineLatest(objectA.asObservable().skip(1),
objectB.asObservable().skip(1))
.throttle(interval,
scheduler: scheduler)
}
然后,如果需要处置订阅,则可以使用处置包并使用新的节流参数再次进行订阅。
var bag: DisposeBag! = DisposeBag()
throttled(with: 30).subscribe(onNext: { _ in
self.update()
}).disposed(by: bag)
bag = DisposeBag()
throttled(with: 20).subscribe(onNext: { _ in
self.update()
}).disposed(by: bag)
bag = DisposeBag()
throttled(with: 10).subscribe(onNext: { _ in
self.update()
}).disposed(by: bag)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.