2015-04-29 8 views
5

Mit AFNetworking folgte ich dem Vorschlag Muster zum Erstellen einer anwendungsspezifischen Unterklasse von AFHTTPSessionManager. Mine sah wie folgt aus:Alamofire entspricht AFFHTTPSessionManager

static NSString* Username = @""; 
static NSString* Password = @""; 
static NSString* BaseURL = @"https://abc.xyz.com:12345/"; 

@implementation HttpConnection 

+ (HttpConnection*) current { 
    static HttpConnection* current = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     current = [[self alloc] initWithBaseURL: [NSURL URLWithString: BaseURL]]; 
     current.securityPolicy.allowInvalidCertificates = YES; 
     current.responseSerializer = [AFJSONResponseSerializer serializer]; 
     current.requestSerializer = [AFJSONRequestSerializer serializer]; 
    }); 
    [current.requestSerializer setAuthorizationHeaderFieldWithUsername: Username password: Password]; 
    return current; 
} 

Ich bin gespannt, wie ich dieses Muster mit Alamofire verwenden übersetzen sollte. Ist es nur etwas wie das Folgende?

static let BaseURL = "https://abc.xyz.com:12345/" 
static var User = "" 
static var Password = "" 

func myAppRequest((method: Method, URLString: URLStringConvertible, parameters: [String: AnyObject]? = nil, encoding: ParameterEncoding = .URL) -> Request { 
    let request = Alamofire.request(method, BaseURL + URLString, parameters, encoding) 
    request.authenticate(user: User, password: "Password) 
    return request 
} 

im Code Alamofire Spähen, habe ich eine Ahnung, dass es möglich sein kann Alamofire.Manager.sharedInstance zu den entsprechenden Zeiten (baseURL bei app Start und Benutzer/Passwort, wenn diejenigen ändern) zu manipulieren. Aber das ist weniger offensichtlich, wie man das macht (wenn es tatsächlich möglich ist).

+1

Ich wünschte, wenn es eine Down-Abstimmung gab, haben Sie zumindest gesagt warum. –

Antwort

0

Ich benutze Alamofire.Manager, um alle Anfragen zu bearbeiten. So mache ich es.

//initialize with all details such as referrer etc 
self.manager = Alamofire.Manager(configuration: cfg) 


let user = "user" 
let password = "password" 
// you may manipulate configuration later on if you want. 
self.manager.session.configuration.HTTPAdditionalHeaders!["Referer"] = self.host 
self.manager.request(.GET, "https://httpbin.org/basic-auth/\(user)/\(password)") 
     .authenticate(user: user, password: password) 
     .responseJSON { (req, res, json, error) in 
      if(error != nil) { 
       NSLog("Error: \(error)") 
       failure(res, json, error) 
       return 
      } 
      else { 
       // do something with JSON 
    } 
} 
+3

mngr schmerzt nur meine Seele. Bitte, bitte, benutze tatsächliche Wörter, wenn du Dinge nennst, für dich und für jeden, der deinen Code liest. –

+0

Ich will deiner Seele keinen Schmerz zufügen :) Ich habe die Variable umbenannt. – Meanteacher

+0

Also gibt es keine Möglichkeit, die '.authenticate' in die Konfiguration eingebaut zu bekommen? Ist der self.host/Referrer, wo Sie festlegen, was eine BaseURL ist? –