如何在Swift中创buildGET,POST和PUT请求?

我可以用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 

这只是一次性接收信息的好处,但是如何使用GET,POST和PUT来处理Swift。 无论我search多less,我都找不到一个很好的教程或例子来说明如何执行这些。

我创build了一个具有正确参数的项目的函数,您可以发布,放置和获取

 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.sharedApplication().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.sharedApplication().networkActivityIndicatorVisible = false taskGetCategories.resume() } } } 

这如何使用该function:

  fetchData(feed,token: Constants.token(), parameters: params, method: "POST", onCompletion: { (success, data) -> Void in if success { //Code after completion} }) 
  • feed – >这是到服务器的链接
  • 令牌(可选) – >某些请求需要令牌用于安全目的
  • 参数(可选) – >这些是您可以传递给服务器的所有参数。 (这是一个词典btw)
  • 方法(可选) – >在这里你可以select你想要的请求types(“GET”,“POST”,“PUT”)
  • 完成closures – >在这里,你传递了一个函数,当请求完成时,这个函数将被执行。 在closures中,你会得到两个参数:“成功”是一个bool,指示请求是否成功,“数据”。 这是一个包含所有响应数据的字典(可能为零)

希望我帮助。 对不起,我的英语

 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() 

您可以使用swift NSMutableURLRequest来发出POST请求。

Swift GET示例:

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

文档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])]]; 

这是在Objective-C,但很容易转换为迅速。

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