Moya的响应头现在其实很难。这是莫亚代码中一种不需要的旧式沮丧。我永远不知道他们为什么贬低它。
我开了一个相关的问题指出来:Moya header
,并做一些改变得益于拉请求:Moya header PR
这是我forcecast应对可以访问我的个人代码的例子到标题:
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为! HTTPURLResponse –