모야의 응답 헤더는 사실 매우 어렵습니다. Moya 코드에서 원치 않는 오래된 다운 캐스트입니다. 왜 그들이 그것을 내렸는 지 나는 결코 알지 못한다. 이것은 내가 액세스를 얻기 위해 응답을 forcecast 내 개인 코드의 예입니다 Moya header PR
: 풀 요청에 약간의 변화 덕분에 Moya header
을 그리고 수행
나는 그것을 지적하는 관련 문제를 열었다 헤더에 :
class GetTokenRequest {
private let requestService = AuthorizedRequest()
func request() -> Observable<AuthorizedResult<GetTokenEntityResult>> {
return Observable.deferred { [weak self] in
guard let wself = self else {
return Observable.empty()
}
let req = wself.requestService.makeRawRequest { userId in
let obj = GetTokenEntity(lang: currentLanguage(), userId: userId)
return MtxAPI.getToken(obj)
}
.shareReplay(1)
return req.map { result in
switch result {
case .success(let response):
let urlResponse = response.response as! HTTPURLResponse
guard let token = urlResponse.allHeaderFields["Token"] as? String else {
return AuthorizedResult.fail(RequestError.technical)
}
return AuthorizedResult.success(GetTokenEntityResult(token: token))
case .fail(let error): return AuthorizedResult.fail(error)
}
}
}
}
}
내가 RxSwift하지만 메인 라인을 사용하고 있습니다 :
let urlResponse = response.response as! HTTPURLResponse
당신은 당신의지도에 그것을 forcecast 수/mapObject/mapArray 당신이 응답을 얻을 때 사용이다 (이는 Moya.Response
)
내가 만든 문제를 따르도록 당신에게 제안
,이 구현 될 때 알을 이 breaking change
보너스를 포함 할 다음 릴리즈 : 프로젝트에서 SwiftLint를 사용하는 경우, 당신은 guard/let
guard let resp = response.response as? HTTPURLResponse
으로 캐스팅 할 수 있습니다 감사합니다! 추가 한 후에 응답 헤더를 가져올 수 있습니다. urlResponse = response.response as! HTTPURL 응답 –