2016-11-14 64 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) 

注:

  • 如果可訪問性是問題,那麼您會收到編譯器錯誤。
  • 官方編碼風格指南告訴我們使用小寫字母作爲變量。
  • 使用類型作爲變量名稱不是很豐富;具有相同名稱的方法甚至更少。