首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift iOS ReactiveKit:调用观察者会导致多次触发操作?

Swift iOS ReactiveKit:调用观察者会导致多次触发操作?
EN

Stack Overflow用户
提问于 2018-10-19 06:27:52
回答 1查看 376关注 0票数 1

我有Singleton类,用于观察属性并触发下一个操作。

单身阶级:

代码语言:javascript
复制
public class BridgeDispatcher: NSObject {

    open var shouldRespondToBridgeEvent = SafePublishSubject<[String: Any]>()
    open var shouldPop = SafePublishSubject<Void>()
    open var shouldUpdate = SafePublishSubject<Void>()

    public let disposeBag = DisposeBag()

    open static let sharedInstance: BridgeDispatcher = BridgeDispatcher()

    override init() {
        super.init()

        shouldRespondToBridgeEvent.observeNext { event in
            if let type = event["type"] as? String {

                switch type {
                case "ShouldUpdate":
                        self.onShiftBlockDidUpdateHeight.next()
                case "shouldPop":
                    self.onPopCurrentViewController.next(())
                default:
                    print("Event not supported")
                }
            }
        }.dispose(in: self.disposeBag)
    }
}

上面的方法将通过调用:

代码语言:javascript
复制
BridgeDispatcher.sharedInstance.shouldRespondToBridgeEvent.next(body)

注册onPopCurrentViewController:

代码语言:javascript
复制
BridgeDispatcher.sharedInstance.onPopCurrentViewController.observeNext { doSomething() }.dispose(in: BridgeDispatcher.sharedInstance.disposeBag)

在我的应用程序中,由于业务逻辑,BridgeDispatcher.sharedInstance.onPopCurrentViewController.observeNext{}方法将被多次调用,因此doSomething()方法在调用BridgeDispatcher.sharedInstance.shouldRespondToBridgeEvent.next(body)时将触发多次。

是我的单例设计模式或observeNext多次调用的问题吗?(BridgeDispatcher.sharedInstance.onPopCurrentViewController.observeNext{} )

代码语言:javascript
复制
Need help.
EN

回答 1

Stack Overflow用户

发布于 2020-03-02 12:32:55

我在ObservableComponent上使用过ObservableComponent。

代码语言:javascript
复制
valueToUpdate.updateSignal.compactMap { (arg0) -> String? in
            let (value, _, validationFailure) = arg0
            return validationFailure == nil ? value?.value : nil
        }
        .removeDuplicates()
        .debounce(for: 1.0)
        .observeNext { [unowned self] _ in
            self.doYourWork()
        }
        .dispose(in: self.bag)

它尝试以两种方式处理多个调用:第一,放弃任何重复事件,因此,如果持续时间没有改变,那么就不会进行调用。其次,通过取消信号,所以如果用户做了大量的更改,我们只在他们完成更改时调用该方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52886901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档