动态改变油门参数
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 的功能性、声明性性质有利于根据需要使用新参数创建新的 observable/subscription,而不是为现有的可观察对象动态更改节流参数。
例如,为您的 observable 创建一个设置节流间隔的函数。
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)
是否可以在运行时动态更改油门参数(在本例中为“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 的功能性、声明性性质有利于根据需要使用新参数创建新的 observable/subscription,而不是为现有的可观察对象动态更改节流参数。
例如,为您的 observable 创建一个设置节流间隔的函数。
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)