在 AlamofireObjectMapper 响应中映射 allHeaderFields

Posted

技术标签:

【中文标题】在 AlamofireObjectMapper 响应中映射 allHeaderFields【英文标题】:Mapping allHeaderFields in AlamofireObjectMapper response 【发布时间】:2019-04-16 15:47:23 【问题描述】:

我正在使用AlamofireObjectMapper

来自我的服务器的响应是 JSON 格式,但它还在标题中包含一些键

Alamofire.request(URL).responseObject  (response: DataResponse<MyMappable>) in

let weatherResponse = response.result.value
print(weatherResponse?.location)

    

我的地图类是这样的

class MyMappable: Mappable 
var location: String?

required init?(map: Map)



func mapping(map: Map) 
    location <- map["location"]

   

以上所有代码都可以工作,但我的问题是我想映射一些值是标头,我只能在响应中获取这些标头

let allHeaders = response.response?.allHeaderFields
if let headers = allHeaders as? [String: String], let someValue = headers["key"] 


  print("my value is: \(someValue)")
                

但我想将它映射到 MyMappable 类中,可以吗?

【问题讨论】:

【参考方案1】:

我找不到将标头字段与有效负载映射的方法 我能找到的是,我们可以从响应中获取所有标头字段,并以两种方式将其存储在我们的类中。 第一个是这样的

    Alamofire.request(URL).responseObject  (response: DataResponse<MyMappable>) in    
let myMappable = response.result.value
myMappable.allHeaderFields  = response.response?.allHeaderFields
print(myMappable?.location)


如果您使用泛型类作为父类,则第二种方式(我使用的方式)那么您可以像打击一样投射您的响应

 Alamofire.request(URL).responseObject  (response: DataResponse<MyMappable>) in

let myMappable = response.result.value
if let genericResp = myMappable as? GenericResponse<AnyGeneric> 
     genericResp.mHeaders = response.response?.allHeaderFields
   

  

【讨论】:

以上是关于在 AlamofireObjectMapper 响应中映射 allHeaderFields的主要内容,如果未能解决你的问题,请参考以下文章

AlamofireObjectMapper,嵌套的 JSON 结构在序列化时总是 nil

更新到 swift 3 时 AlamofireObjectMapper 不支持 ios8?

如何实例化映射类? (迅速 - alamofireObjectMapper)

使用 AlamofireObjectMapper 创建 func 返回一个对象

AlamofireObjectmapper 编码模型属性

AlamofireObjectMapper / ObjectMapper 是不是支持结构类型映射