2016-11-14 5 views
1

Ich benutze Alamofire für Netzwerkanrufe.ändern HTTP-Header für alle Anfragen in Alamofire

Die Hauptfunktion ist als:

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

... 

    return request 
} 

Also ich meine URLRequestConvertible erstellt und lief Anfrage Methode des Alamofire. Während ich auch versuche, HTTP-Header hinzuzufügen.

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

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

    return request 
} 

Aber nichts passiert, keine Header hinzugefügt! Nur Header, die vor der Anforderung Methodenaufruf hinzugefügt wurden, existieren. Das Problem ist, ich glaube URLRequest ist get nur und ich kann nicht set es. Gibt es eine Problemumgehung?

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

Gibt es eine Problemumgehung?

Antwort

0

URLRequest ist eine Struktur, so dass Sie die Methode-lokale Kopie ändern; die Veränderung pflanzt sich niemals nach draußen fort.

Sie dieses Problem lösen, indem Sie die Parameter machen inout:

let myRequest = ... 
request(&myRequest) 

Hinweise:

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

Call-Ort werden Sie die Parameter explizit als auch markieren müssen

  • Wenn die Barrierefreiheit das Problem gewesen wäre, hätten Sie einen Compilerfehler erhalten.
  • Die offiziellen Kodierungsstil-Richtlinien sagen uns, Kleinbuchstaben für Variablen zu verwenden.
  • Die Verwendung von Typen als Variablennamen ist nicht sehr informativ; eine Methode mit dem gleichen Namen noch weniger zu haben.
Verwandte Themen