我遇到了以下錯誤:無法將類型的值 '(_) - >可觀察<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不是?請分享更多關於你的類型,很難在沒有更多信息的情況下幫助你 –