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

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

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

        let provider = MoyaProvider<MultiTarget>()

        return provider.rx.request(target)
            .asObservable()
            .filterSuccessfulStatusCodes()
            .mapJSON()
            .mapObject(type: LoginModel.self)
            .showAPIErrorToast()
            .flatMapLatest({ (model) in
                return Observable.just(YYAccountLoginResult.success(message: "登录成功", data: model))
            })
            
            // 使用以下代码会去执行请求,但是违背了原则,并执行了两次api请求
            // .subscribe()
    }

static let provider =  MoyaProvider<MultiTarget>()

// 登录请求(MoyaProvider使用静态常量创建时以下代码执行正常)
    func login(account: String, password: String) -> Observable<YYAccountLoginResult> {
        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) in
                return Observable.just(YYAccountLoginResult.success(message: "登录成功", data: model))
            })
              
    }


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

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值