gpt4 book ai didi

swift - 结合 2 个 PublishSubject 并使用 Observable.combineLatest 发出

转载 作者:行者123 更新时间:2023-11-28 11:24:56 26 4
gpt4 key购买 nike

我的服务中有 2 个独立的数据集合。

精选标准 内容。

我调用了 2 个 api 来返回这些项目。它们可以单独使用,但是我也有这样的用例,我想获取两组数据,根据条件提供一些丰富内容,然后将它们返回给消费者。

我希望我能做这样的事情:


class ContentService: ContentServiceType {

let featured = PublishSubject<[Content]>()
let standard = PublishSubject<[Content]>()

let content: Observable<(featured: [Content], standard: [Content])>

private let client: Client<ContentAPI>
private let disposeBag = DisposeBag()

init(client: Client<ContentAPI>) {
self.client = client

content = Observable
.combineLatest(featured, standard)
.map { (featured, standard) -> (featured: [Content], standard: [Content]) in

/*
Do some enrichment and create then return new, updated versions
*/

return (featured: updatedFeatured, standard: updatedStandard)
}.share()
}

func fetchStandardContent(page: Int = 0, size: Int = 100) -> Single<Void> {

let params = ["page": page, "size": size]
let request: Single<Content> = client.request(.getStandardContent(params))

return request.map { [unowned self] launchers in
self.standard.onNext(content.props)
return ()
}
}

func fetchFeaturedContent(page: Int = 0, size: Int = 100) -> Single<Void> {

let params = ["page": page, "size": size]
let request: Single<Content> = client.request(.getFeaturedContent(params))

return request.map { [unowned self] content in
self.featured.onNext(content.props)
return ()
}
}
}

然后我希望在我的应用程序的其他地方可以做类似的事情

        contentSvc.content
.observeOn(MainScheduler.instance)
.subscribeOn(ConcurrentDispatchQueueScheduler(qos: .background))
.subscribe(onNext: { content in
/* do something w/ content */
}).disposed(by: disposeBag)

然后,每当调用 contentSvc.fetchFeaturedContentcontentSvc.fetchStandardContent 时,上面的 contentSvc.content 订阅者就会获取新数据。

相反,content 似乎没有发出任何值。

最佳答案

combineLatest 要求两个源都发出,我相信它会发出自己。

我可能会考虑使用 BehaviorSubjectBehaviorRelay 而不是 PublishSubject。

关于swift - 结合 2 个 PublishSubject 并使用 Observable.combineLatest 发出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58488482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com