Нажатие кнопки не вызывает запрос сети 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
цепь.