¿Cómo crear una request GET, POST y PUT en Swift?

Puedo conectarme a un server sincrónicamente con este fragment de código en swift.

let URL: NSURL = NSURL(string: "http://someserver.com)! let InfoJSON: NSData? = NSData(contentsOfURL: URL) let JsonInfo: NSString = NSString(data:InfoJSON!, encoding: NSUTF8StringEncoding)! let GameListAttributions: NSArray = NSJSONSerialization.JSONObjectWithData(InfoJSON!, options: .allZeros, error: nil)! as NSArray 

Esto solo es bueno para recibir información de una vez, pero ¿cómo utilizaré GET, POST y PUT con Swift? No importa cuánto busque, no puedo encontrar un buen tutorial o un ejemplo sobre cómo ejecutarlos.

Creé una function para un proyecto que, con los arguments correctos, puede publicar, poner y get

 private func fetchData(feed:String,token:String? = nil,parameters:[String:AnyObject]? = nil,method:String? = nil, onCompletion:(success:Bool,data:NSDictionary?)->Void){ dispatch_async(dispatch_get_main_queue()) { UIApplication.shanetworkingApplication().networkActivityIndicatorVisible = true let url = NSURL(string: feed) if let unwrapped_url = NSURL(string: feed){ let request = NSMutableURLRequest(URL: unwrapped_url) if let tk = token { let authValue = "Token \(tk)" request.setValue(authValue, forHTTPHeaderField: "Authorization") } if let parm = parameters{ if let data = NSJSONSerialization.dataWithJSONObject(parm, options:NSJSONWritingOptions(0), error:nil) as NSData? { //println(NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(0), error: nil)) request.HTTPBody = data request.setValue("application/json", forHTTPHeaderField: "Content-Type") request.setValue("\(data.length)", forHTTPHeaderField: "Content-Length") } } if let unwrapped_method = method { request.HTTPMethod = unwrapped_method } let sessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration() sessionConfiguration.timeoutIntervalForRequest = 15.0 let session = NSURLSession(configuration: sessionConfiguration) let taskGetCategories = session.dataTaskWithRequest(request){ (responseData, response, error) -> Void in let statusCode = (response as NSHTTPURLResponse?)?.statusCode //println("Status Code: \(statusCode), error: \(error)") if error != nil || (statusCode != 200 && statusCode != 201 && statusCode != 202){ onCompletion(success: false, data:nil) } else { var e: NSError? if let dictionary = NSJSONSerialization.JSONObjectWithData(responseData, options: .MutableContainers | .AllowFragments, error: &e) as? NSDictionary{ onCompletion(success:true,data:dictionary) } else{ onCompletion(success: false, data:nil) } } } UIApplication.shanetworkingApplication().networkActivityIndicatorVisible = false taskGetCategories.resume() } } } 

Este cómo usar la function:

  fetchData(feed,token: Constants.token(), parameters: params, method: "POST", onCompletion: { (success, data) -> Void in if success { //Code after completion} }) 
  • feed -> Este es el enlace al server
  • token (opcional) -> Algunas requestes necesitan token para fines de security
  • parameters (opcional) -> Estos son todos los parameters que puede pasar al server. (Este es un dictionary por cierto)
  • método (opcional) -> Aquí puede elegir qué tipo de request desea ("GET", "POST", "PUT")
  • Cierre de finalización -> Aquí se pasa una function que se va a ejecutar cuando se completa la request. En el cierre obtienes dos parameters: "éxito" es un bool que indica si la request fue exitosa y "datos". Este es un dictionary con todos los datos de respuesta. (Podría ser nulo)

Espero que haya ayudado Y lo siento por mi Inglés

 let url = NSURL(string: "https://yourUrl.com") //Remember to put ATS exception if the URL is not https let request = NSMutableURLRequest(URL: url!) request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") //Optional request.HTTPMethod = "PUT" let session = NSURLSession(configuration:NSURLSessionConfiguration.defaultSessionConfiguration(), delegate: nil, delegateQueue: nil) let data = "username=self@gmail.com&password=password".dataUsingEncoding(NSUTF8StringEncoding) request.HTTPBody = data let dataTask = session.dataTaskWithRequest(request) { (data, response, error) -> Void in if error != nil { //handle error } else { let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding) print("Parsed JSON: '\(jsonStr)'") } } dataTask.resume() 

Puede usar la NSMutableURLRequest swift NSMutableURLRequest para realizar una request POST.

Swift GET Ejemplo:

 let requestURL = NSURL(string:"urlhere")! var request = NSMutableURLRequest(URL: requestURL) request.HTTPMethod = "GET" let session = NSURLSession.shanetworkingSession() let task = session.dataTaskWithRequest(request, completionHandler:loadedData) task.resume() 

Ejemplo de documentation POST:

 NSString *bodyData = @"name=Jane+Doe&address=123+Main+St"; NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://www.apple.com"]]; // Set the request's content type to application/x-www-form-urlencoded [postRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; // Designate the request a POST request and specify its body data [postRequest setHTTPMethod:@"POST"]; [postRequest setHTTPBody:[NSData dataWithBytes:[bodyData UTF8String] length:strlen([bodyData UTF8String])]]; 

Esto está en el objective c, pero es lo suficientemente fácil para convertirse en rápido.

Documentación: https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html#//apple_ref/doc/uid/20001836-SW4