ios - 使用 RxSwift 分配属性

标签 ios swift rx-swift reactivex

假设我们使用下一页从服务器检索联系人列表:

retrieveContacts()
    .subscribeOn(ConcurrentDispatchQueueScheduler(qos: .background))
    .observeOn(MainScheduler.instance)
    .subscribe(onNext: { [weak self] contacts, nextPage in 
        self?.nextPage = nextPage
        // do something with contacts
    })
    .disposed(by: disposeBag)

现在我们想将这些联系人传递给其他可观察对象,但同时我们必须将 self.nextPage 分配给新的 nextPage。我们可以这样在后台做:

retrieveContacts()
        .subscribeOn(ConcurrentDispatchQueueScheduler(qos: .background))
        .observeOn(MainScheduler.instance)
        .map { [weak self] contacts, nextPage in 
            self?.nextPage = nextPage
            return Observable.just(contacts)
        }
        .observeOn(ConcurrentDispatchQueueScheduler(qos: .background))
        .map { contacts in
            // do something with contacts but now on background
        }

有没有更好的方法通过改变.observeOn方法中的线程来分配属性?

最佳答案

let observable = retrieveContacts()
    .subscribeOn(ConcurrentDispatchQueueScheduler(qos: .background))
    .share()

    observable.observeOn(MainScheduler.instance)
    .subscribe(onNext: { [weak self] contacts, nextPage in 
        self?.nextPage = nextPage
        // do something with nextPage
    })

    observable.observeOn(ConcurrentDispatchQueueScheduler(qos: .background))
    .subscribe(onNext: { [weak self] contacts, nextPage in 
        self?.contacts = contacts
        // do something with contacts
    })

关于ios - 使用 RxSwift 分配属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49643251/

相关文章:

ios - 没有获得 UIAccessibilityElement 的正确坐标

javascript - 当到达下拉列表时点击 iphone 手机箭头键,它应该显示下拉列表内容

ios - 我可以在 swift 3 中使用 ReactiveCocoa 吗?

ios - 如何使用 RxSwift 交替注册显示 2 个自定义单元格

ios - 如何使用 Storyboard 在 UIPopover 中设置导航栏?

ios - UIButton 位于 View 顶部且 userInteractionEnabled=NO

swift - 无法将 'ViewController.Type' 转换为 Facebook shareDialog 中的“UIViewController”

ios - 如何保证异步请求的正确顺序

ios - 排序 CKRecord 返回 "Expected Types"

swift - 使用 RxSwift 的问题