2016-11-14 69 views
1

我正在使用Alamofire进行网络调用。更改Alamofire中所有请求的HTTP标头

主要功能是:

public func request(URLRequest: URLRequestConvertible) -> Request { 

... 

    return request 
} 

所以我创造了我的URLRequestConvertible就跑Alamofire的要求方法。同时我也尝试添加HTTP标头。

public func request(URLRequest: URLRequestConvertible) -> Request { 

URLRequest.setValue("\random()" , forHTTPHeaderField : "identifier" 
URLRequest.setValue("\buildversion()" , forHTTPHeaderField : "build" 

    return request 
} 

但没有任何反应,没有标题添加!只有在请求方法调用之前添加了的标头才存在。

问题是我相信URLRequest只有get而我不能set它。有什么解决方法吗?

public protocol URLRequestConvertible { 
    /// The URL request. 
    var URLRequest: NSMutableURLRequest { get } 
} 

有没有什么解决方法?

回答

0

URLRequest是一个结构体,因此您可以修改方法 - 本地副本;变化永远不会传播到外面。

方法是,将参数inout解决这个问题:

public func request(request: inout URLRequestConvertible) -> Request { 
    ... 
} 

调用点,你必须明确地标记参数以及:

let myRequest = ... 
request(&myRequest) 

注:

  • 如果可访问性是问题,那么您会收到编译器错误。
  • 官方编码风格指南告诉我们使用小写字母作为变量。
  • 使用类型作为变量名称不是很丰富;具有相同名称的方法甚至更少。