我遇到了以下错误:无法将类型的值 '(_) - >可观察<Response>' 预期参数类型 '([_]) - > _'
Cannot convert value of type '(_) -> Observable<Response>'
to expected argument type '([_]) -> _'
,当我试图编译:
func request(_ token: MyAPI) -> Observable<Moya.Response> {
switch (target.requiresCSRF, target.requiresOAuth) {
case (false, false): return actualRequest
case (true, false): return CSRFTokenRequest().flatMap { _ in actualRequest }
case (false, true): return OAuthTokenRequest().flatMap { _ in actualRequest }
case (true, true): return Observable.zip([CSRFTokenRequest(), OAuthTokenRequest()]) { _ in actualRequest }
}
}
actualRequest类型为Observable<Response>
两个CSRFTokenRequest和OAuthTokenRequest类型为Observable<String?>
我试图るn CSRFTokenRequest之前OAuthTokenRequest然后实际请求。
下解决了问题...但我不知道这是做正确的方式...
return RequiresCSRFTokenRequest().flatMap{ _ in
self.RequiresAuthenticationRequest().flatMap{ _ in actualRequest}
}
fileprivate extension Networking{
func RequiresAuthenticationRequest() -> Observable<String> {
/// This has 3 cases
// 0. token is not present, error out
// 1. token is not expired, return token
// 2. token is expired, needs refresh
guard let jwt = AuthManager.shared.accessToken else{
return .just("Error!! No access tokens")
}
// If access token is valid
if AuthManager.shared.expiredAccessToken == false{
return .just(jwt)
}else{
return request(.refreshAccessToken(refreshToken: AuthManager.shared.refreshTokenWithBearer!))
.filterSuccessfulStatusCodes()
.mapObject(type: UserAuthenticationTokens.self)
.do(onNext: {
$0.save()})
.map{ (token) -> String in
// Get new access token that was just saved
return AuthManager.shared.accessToken!
}
}
}
func RequiresCSRFTokenRequest() -> Observable<String> {
// Always get a new csrf token
return request(.getCSRF())
.filterSuccessfulStatusCodes()
.mapObject(type: CSRFToken.self)
.do(onNext: {
$0.save()
}).map{ (token) -> String in
return AuthManager.shared.csrf_token!
}
}
}
谢谢!
所有这些表达式的返回类型是什么? – Alexander
它们应该是可观察的 –
user805981
什么是'actualRequest'?我想它是返回一个'Observable不是?请分享更多关于你的类型,很难在没有更多信息的情况下帮助你 –