繁体   English   中英

动态更改油门参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM