RxSwift - 重播Tap事件

时间:2017-09-20 16:23:35

标签: swift uinavigationcontroller rx-swift

当用户点击按钮时,我会显示一个选择屏幕。结果传递到我的视图模型中。代码如下所示:

locationButton.rx.tap
            .flatMapLatest(wireframe.displayPlaceSelection)
            .filterNil()
            .map(DiscoverLocationSelection.location)
            .subscribe(onNext: viewModel.updateLocation(with:))
            .disposed(by: disposeBag)

此代码工作正常,用户可以选择一个位置,并使用按钮返回到此屏幕。

如果用户再次点击该按钮,则会调用displayPlaceSelection()函数两次。如果用户第三次这样做,该函数将被调用3次。这导致多个视图控制器被推到彼此之上。

如何阻止这些事件堆叠?

效果如下:

RxSwift Tap Replay

1 个答案:

答案 0 :(得分:2)

我可以假设每次打开此vc时都会调用此代码(subscribe),因此您有许多tap事件的订阅者。这段代码在哪里?例如viewDidLoadviewWillAppear