目前,我想将Observable<UIViewController>
的值绑定到我的UIPageViewController
。最初的想法很简单明了:
viewControllerObservable
.subscribe(onNext: { [weak self] viewController in
self?.pageVC.setViewControllers([viewController],
direction: .forward,
animated: false,
completion: nil)
})
.disposed(by: disposeBag)
但是如果viewControllerObservable中的值变化太快,页面视图控制器会在添加以前的视图控制器并且我获得NSInternalInconsistencyException
之前接收到新的set命令。
我可以使用Binder
使代码更多&#34;反应&#34;但我仍然会面临同样的问题。
这里非常明显的方法是使用油门,但它似乎是非常脏的修复,掩盖问题,而不是修复它。
理想情况下,在completion
调用setViewControllers
之前,我需要一些方法来进行进一步的值处理。
我怎样才能做到这一点?
答案 0 :(得分:0)
所以,到目前为止,最好的解决方案是使用第二个observable进行同步。
let sync = BehaviorSubject<Void>(value: ())
Observable.zip(pageProvider.selectedViewControllerObservable, sync)
.subscribe(onNext: { [weak self] viewController, _ in
self?.pageVC.setViewControllers([viewController],
direction: .forward,
animated: false,
completion: {sync.onNext()})
})
.disposed(by: disposeBag)
当Observable.zip
等待两个observable都发出值时,它将被“锁定”,直到sync
将接收下一个值。