订阅 Observable 时如何在 onNext 案例中获取状态码

Posted

技术标签:

【中文标题】订阅 Observable 时如何在 onNext 案例中获取状态码【英文标题】:How to get the status code in the onNext case while subscribing to an Observable 【发布时间】:2017-05-03 11:32:18 【问题描述】:

我在我的 swift 应用程序中使用 Moya 来处理网络请求。

我之前用过alamofire,熟悉如何发帖、获取请求和阅读响应。

以下是我提出请求并订阅 observable 的代码

provider.request(.getDetails)
            .mapArray(Post.self)
            .subscribe  event -> Void in
                switch event 
                case .next(let post):
                 self.sampleText.text = posts.first?.title
                case .error(let error):
                    print(error)
                default:
                    break
                
            .addDisposableTo(disposeBag)

在 .next 案例中,我还想检索状态码和 response.data。

当 observable 的类型为 Response 时,我可以这样做,但是当我将其映射到 Post 类型时,我无法获取状态码。

如何在 .next 或错误情况下获取请求的状态码

任何帮助将不胜感激。谢谢。

【问题讨论】:

【参考方案1】:

也许是这样?使用zip

let provider: RxMoyaProvider<Api> = RxMoyaProvider<Api>()
let observable1: Observable<Response> = provider
    .request(.getDetails)
    .shareReplay(1)
let observable2: Observable<[Post]> = observable1
    .map( _ in () ) // You map to Post.self here
    .shareReplay(1)
Observable
    .zip(observable1, observable2)($0, $1)
    .subscribe( (event) in
        // event has Response + Posts array
    )

combineLatest 也可以像zip 一样提供帮助

【讨论】:

以上是关于订阅 Observable 时如何在 onNext 案例中获取状态码的主要内容,如果未能解决你的问题,请参考以下文章

在 OnNext 运行时,我想删除所有传入的通知,除了最新的

rxswift observable 的简单 swift 变量

在 RxSwift PublishSubject 上完成后订阅最后一个值

RxSwift 共享订阅执行顺序

RxJava2.1.0:在不同线程上订阅时未调用 PublishSubject onNext

observable.observeOn() 和公共资源的并发问题