事实上,Moya 中的响应头目前相当困难。这是 Moya 代码中不必要的旧的沮丧。我永远不知道他们为什么对此感到沮丧。
我开了一个相关问题来指出这一点:莫亚头球 https://github.com/Moya/Moya/pull/1044
并通过拉取请求进行一些更改:莫亚头条公关 https://github.com/Moya/Moya/issues/1040
这是我的个人代码示例,我在其中强制转换响应以访问标头:
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
当您收到响应时,您可以将其强制转换到您使用的map/mapObject/mapArray中(这是一个Moya.Response
)
我建议您关注我提出的问题,以了解它将在包含此内容的下一个版本中何时实施breaking change
奖励:如果您在项目中使用 SwiftLint,您可以使用guard/let
guard let resp = response.response as? HTTPURLResponse