频道栏目
首页 > 资讯 > 其他 > 正文

疑问: moya与rxswift结合使用时; MoyaProvider 无法发起请求?

18-06-28        来源:[db:作者]  
收藏   我要投稿

疑问: moya与rxswift结合使用时; MoyaProvider 无法发起请求

疑问:MoyaProvider 只能使用静态常量创建才可以使用Rxswift去订阅返回的消息吗

// 登录请求(使用该方式时, 该请求始终不执行)func login(account: String, password: String) -> Observable {let target = MultiTarget(ApiUser.login(phone: account, password: password))

let provider =MoyaProvider()

return provider.rx.request(target).asObservable().filterSuccessfulStatusCodes().mapJSON().mapObject(type: LoginModel.self).showAPIErrorToast().flatMapLatest({ (model) inreturn Observable.just(YYAccountLoginResult.success(message: "登录成功", data: model))})

// 使用以下代码会去执行请求,但是违背了原则,并执行了两次api请求

//.subscribe()

}

static let provider =MoyaProvider()

// 登录请求(MoyaProvider使用静态常量创建时以下代码执行正常)func login(account: String, password: String) -> Observable {let target = MultiTarget(ApiUser.login(phone: account, password: password))

return LoginService.provider.rx.request(target).asObservable().filterSuccessfulStatusCodes().mapJSON().mapObject(type: LoginModel.self).showAPIErrorToast().flatMapLatest({ (model) inreturn Observable.just(YYAccountLoginResult.success(message: "登录成功", data: model))}) }

需求: 想通过一些参数创建不同的MoyaProvider; 比如是否出现加载框,该请求是否需要缓存,该请求是否需要验证token是否过期原因: 由于每个请求都需要创建MoyaProvider,然后想通过这种方式统一管理结果造成上述无法访问的问题,由于刚接触rxswift理解不够深入,希望有时间,会的人指教啦,谢谢/// 在所有url后面拼接key参数private func endpointMapping(target: Target) -> Endpoint {let defaultEndpoint = MoyaProvider.defaultEndpointMapping(for: target)let baseUrl = defaultEndpoint.url.appending("key=\(mobAppKey)")return Endpoint(url: baseUrl, sampleResponseClosure: { .networkResponse(200, target.sampleData)}, method: target.method, task: target.task, httpHeaderFields: target.headers)}private func stubMapping(_: Target) -> StubBehavior {// 实时请求api//return StubBehavior.never// 模拟请求(延迟1秒使用sampleData中的测试数据返回)return StubBehavior.delayed(seconds: 1)}

// 创建moya请求类@discardableResultstatic func provider(_ providerType: ProviderType) -> MoyaProvider {switch providerType {case .loding:returnMoyaProvider(endpointClosure: endpointMapping,stubClosure: stubMapping,plugins: [NetworkLoggerPlugin(verbose: true),newworkActivityPlugin,RequestLoadingPlugin(true),AuthPluginToken()])case .noLoading:returnMoyaProvider(endpointClosure: endpointMapping,stubClosure: stubMapping,plugins: [NetworkLoggerPlugin(verbose: true),newworkActivityPlugin,RequestLoadingPlugin(false),AuthPluginToken()])}}

相关TAG标签
上一篇:使用adb发送广播的小DEMO
下一篇:Install APK failure Error:INSTALL_FAILED_INVALID_URI
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站