Нажатие кнопки в RxSwift не вызывает запрос сети Мойя в области плоской карты - PullRequest
0 голосов
/ 25 апреля 2019

Нажатие кнопки не вызывает запрос сети Moya в цепочке плоских карт и возвращает наблюдаемый запрос сети Moya.

  • Я попытался изменить тип didButtonTapped на BehaviorRelay или PublishRelay.
  • Я попытался изменить привязку кнопки к 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)
  }

- Мойя сетевой запрос

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

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

Когда инициализируется viewModel, я добавляю функцию didButtonTappedCallback для установки наблюдателя. Затем, если нажата кнопка, наблюдатель должен вызвать запрос сети Мойя и получить результат как наблюдаемый. Но это не вызывает сетевой 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 цепь.

1 Ответ

0 голосов
/ 26 апреля 2019

Я нашел это , и проблема возникла из-за позиции провайдера Мойя.

По ссылке я переместил свойство провайдера Moya в класс, и тогда оно работает.

...