ios - 在 RxSwift 中点击按钮不会在平面 map 范围内调用 Moya 网络请求

标签 ios swift reactive-programming

点击按钮不会调用 Flatmap 链中的 Moya 网络请求并返回 Moya 网络请求的 Observable。

  • 我尝试将 didButtonTapped 的类型更改为BehaviorRelay 或PublishRelay。
  • 我尝试将按钮绑定(bind)更改为 asDriver
var didButtonTapped = PublishRelay<Void>()

-buttonTappedBinding

private func buttonTappedBinding() {
  self.button.rx.tap
    .throttle(0.3, scheduler: MainScheduler.instance)
    .bind(to: self.viewModel.didButtonTapped)
    .disposed(by: self.disposeBag)
}

-- didButtonTappedCallback

  private func didButtonTappedCallback() {
    self.didButtonTapped
      .flatMap { [weak self] _  -> Observable<TestModel> in
        return self?.moyaNetworkRequest() ?? .empty()
      }
      .subscribe(onNext: { model in
        print("Test Model \(model)")
      })
      .disposed(by: self.disposeBag)
  }

-Moya 网络请求

  private func moyaNetworkRequest() -> Observable<TestModel> {
    let provider = MoyaProvider<TestAPI>(plugins: [])

    return provider.rx.request(.testInfo())
      .filter(statusCode: 200)
      .map(TestModel.self)
      .asObservable()
  }

当 viewModel 初始化时,我添加 didButtonTappedCallback 函数来设置观察者。然后,如果发生点击按钮,观察者应该调用 Moya 网络请求并获取可观察结果。但它不调用网络API。

不同的方法

  private func didButtonTappedCallback() {
    self.didButtonTapped
      .subscribe(onNext: { _ in
        let provider = MoyaProvider<TestAPI>(plugins: [])

        return provider.rx.request(.testInfo())
          .filter(statusCode: 200)
          .map(TestModel.self)
          .asObservable()
          .subscribe(onNext: model in 
            print("Test Model \(model)")   
          })
          .disposed(by: self.disposeBag)
      })
      .disposed(by: self.disposeBag)
  }

如果我这样做,它会调用网络 API。但我不知道为什么我不能使用 Flatmap 链。

最佳答案

我找到了this这个问题是由Moya提供商的立场造成的。

根据链接,我将 Moya 提供程序属性重新定位到类中,然后它就可以工作了。

关于ios - 在 RxSwift 中点击按钮不会在平面 map 范围内调用 Moya 网络请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55840758/

相关文章:

swift - Swift 中的 NSAttributedString

android - RXAndroid : Observable wait for another observable complete

ios - 在 Firebase 上保存和检索图像

ios - 从 Firebase 数据库检索整数什么也没有

swift - 为什么 Swift 接受应该返回元组的代码,但却返回字符串?

arrays - 本地数组更改时如何重新渲染 meteor blaze 模板?

swift - RxSwift - withLatestFrom 结合来自两个可观察值的值

ios - 翻转和旋转

ios - 使用 NSStream 进行 Objective-C 套接字编程

ios - 我们需要在 cellForRowAt 上做 crash App 吗?