swift – 订阅和观察的顺序是否重要?

前端之家收集整理的这篇文章主要介绍了swift – 订阅和观察的顺序是否重要?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有点困惑,你可以称之为订阅和观察方法的可观察的顺序.我读了几个帖子,一个人说没关系,只是在他的例子中使用的东西,而其他人说这很重要.所以这里是我的问题:

例如:

self.remoteService.rxGetAllLanguages()
            .observeOn(MainScheduler.instance)
            .subscribeOn(ConcurrentDispatchQueueScheduler(globalConcurrentQueueQOS: .Background))
            .subscribe({ e in
                switch e {
                case .Next(let element):

                case .Error(let e):
                    DDLogError("Error in  \(e)")
                case .Completed:
                    DDLogDebug("Completed")
                }
                }
            ).addDisposableTo(self.disposeBag)

是这样的:

self.remoteService.rxGetAllLanguages()
                    .subscribeOn(ConcurrentDispatchQueueScheduler(globalConcurrentQueueQOS: .Background))
                    .observeOn(MainScheduler.instance)
                    .subscribe({ e in
                        switch e {
                        case .Next(let element):

                        case .Error(let e):
                            DDLogError("Error in  \(e)")
                        case .Completed:
                            DDLogDebug("Completed")
                        }
                        }
                    ).addDisposableTo(self.disposeBag)

如果我正确地理解他们不同的机制.第一个在主线程上做所有的工作,第二个在另一个线程上执行所有的工作,然后发回到主线程.但是我肯定肯定有人可以为我清除这个吗?

你在一个链中称为subscribeOn()并不重要.在哪里调用observeOn()是重要的.

subscribeOn()告诉整个链,哪个线程开始处理.你应该只链接一次.如果您再次将其称为低级流,则不起作用.

observeOn()导致在其下发生的所有操作在指定的调度程序上执行.每个流可以多次调用它,以便在不同的线程之间移动.

举个例子:

doSomethingRx()
    .subscribeOn(BackgroundScheduler)
    .doAnotherThing()
    .observeOn(ComputationScheduler)
    .doSomethingElse()
    .observeOn(MainScheduler)
    .subscribe(//...)

> subscribeOn导致在BackgroundScheduler上调用doSomethingRx.> doAnotherThing将在BackgroundScheduler上继续>然后观察将流切换到ComputationScheduler> doSomethingElse将发生在ComputationScheduler上>另一个observeOn将流切换到MainScheduler>订阅发生在MainScheduler上

猜你在找的Swift相关文章