在AlamofireObjectMapper响应中映射allHeaderFields

时间:2018-11-13 18:22:31

标签: ios swift mapping alamofire

我正在使用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 个答案:

答案 0 :(得分:0)

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

    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
   }

}