Rx swift 使用RxSwift 4.0.0正确使用retryWhen运算符

Rx swift 使用RxSwift 4.0.0正确使用retryWhen运算符,rx-swift,moya,Rx Swift,Moya,使用RxSwift 3.6.1,我对ObservableType进行了此扩展,以便在错误请求后获得一个新令牌: public extension ObservableType where E == Response { public func retryWithToken() -> Observable<E> { return retryWhen { error -> Observable<Response> in

使用RxSwift 3.6.1,我对ObservableType进行了此扩展,以便在错误请求后获得一个新令牌:

public extension ObservableType where E == Response {
    public func retryWithToken() -> Observable<E> {
        return retryWhen { error -> Observable<Response> in
            return error.flatMap({ (error) -> Observable<Response> in
                if let myApiError: MyApiError = error as? MyApiError {
                    if (myApiError == MyApiError.tokenError) {
                        return Session.shared.myProvider.request(.generateToken)
                    } else {
                        return Observable.error(myApiError)
                    }
                }
                return Observable.error(error)
            })
        }
    }
}
但是现在使用RxSwift 4.0.0,序列预期
PrimitiveSequence


有人可以向我解释如何使用RxSwift 4.0.0实现同样的功能吗?我尝试对PrimitiveSequence进行扩展,但我有一些编译错误。

我认为这与
RxSwift
无关,但却是
Moya
的变化
MoyaProvider.rx.request
返回
Single
,它是
PrimitiveSequence
的类型别名,而不是
observeType

您可以在
可观察类型
上声明函数

因此,只需在
retryWithToken()之前执行
asObservable()

Session.shared.myProvider.rx
    .request(.mySampleRequest)
    .filterSuccessfulStatusCodes()
    .retryWithToken()
    .subscribe { event in
        ....
    }.disposed(by: self.disposeBag)