点击按钮不会调用 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/