swift中的网络请求——NSURLSessionDataTask

前端之家收集整理的这篇文章主要介绍了swift中的网络请求——NSURLSessionDataTask前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

学习地址:https://github.com/potato512/SYSwiftLearning

效果


在swift中使用NSURLSessionDataTask进行网络编程。

  1. // NSURL
  2. let url:NSURL = NSURL(string:"http://rapapi.org/mockjsdata/22598/userloginGet")!
  3. // NSURLRequest
  4. let request:NSURLRequest = NSURLRequest(URL:url)
  5. // NSURLSession
  6. let configuration:NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
  7. let session:NSURLSession = NSURLSession(configuration: configuration)
  8. // NSURLSessionTask
  9. let task:NSURLSessionDataTask = session.dataTaskWithRequest(request,completionHandler: {
  10. (data:NSData?,response:NSURLResponse?,error:NSError?) -> Void in
  11. if error == nil
  12. {
  13. do {
  14. let result:NSDictionary = try NSJSONSerialization.JSONObjectWithData(data!,options: NSJSONReadingOptions.AllowFragments) as! NSDictionary
  15. print(result)
  16. dispatch_async(dispatch_get_main_queue(),{
  17. () -> Void in
  18. let message:String = result.objectForKey("msg") as! String
  19. let alert = UIAlertView(title: nil,message: message,delegate: nil,cancelButtonTitle: "OK")
  20. alert.show()
  21. })
  22. } catch {
  23. }
  24. }
  25. })
  26. // 启动任务
  27. task.resume()

  1. // NSURL
  2. let url:NSURL = NSURL(string:"http://rapapi.org/mockjsdata/22598/userloginPostWithParams")!
  3. // NSURLRequest
  4. let request:NSMutableURLRequest = NSMutableURLRequest(URL:url)
  5. request.HTTPMethod = "POST"
  6. // 参数
  7. // 方法1
  8. // let postString = "userName=devZhang&userPassword=devZhang"
  9. // request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
  10. // 方法2
  11. let postDic :NSDictionary = ["userName":"devZhang","userPassword":"devZhang"]
  12. do {
  13. let data:NSData = try NSJSONSerialization.dataWithJSONObject(postDic,options: NSJSONWritingOptions.PrettyPrinted)
  14. request.HTTPBody = data
  15. } catch {
  16. }
  17.  
  18. // NSURLSession
  19. let configuration:NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
  20. let session:NSURLSession = NSURLSession(configuration: configuration)
  21. // NSURLSessionTask
  22. let task:NSURLSessionDataTask = session.dataTaskWithRequest(request,cancelButtonTitle: "OK")
  23. alert.show()
  24. })
  25. } catch {
  26. }
  27. }
  28. })
  29. // 启动任务
  30. task.resume()


遵守协议 NSURLSessionDelegate 并设置代理的请求方法,同时定义属性 var data:NSMutableData! 以用于接收返回的数据。

  1. // 请求路径
  2. let url: NSURL = NSURL(string:"http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON")!
  3. // 请求对象
  4. // 请求对象内部默认已经包含了请求头和请求方法(GET)
  5. let request: NSURLRequest = NSURLRequest(URL: url)
  6. // 会话对象,并设置代理
  7. /*
  8. 第一个参数:会话对象的配置信息 defaultSessionConfiguration 表示默认配置
  9. 第二个参数:谁成为代理,此处为控制器本身即self,协议 NSURLSessionDelegate
  10. 第三个参数:队列,该队列决定代理方法在哪个线程中调用,可以传主队列|非主队列
  11. [NSOperationQueue mainQueue] 主队列: 代理方法在主线程中调用
  12. [[NSOperationQueue alloc]init] 非主队列: 代理方法在子线程中调用
  13. */
  14. let session: NSURLSession = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(),delegate: self,delegateQueue: NSOperationQueue.mainQueue())
  15. // 根据会话对象创建一个Task(发送请求)
  16. let dataTask: NSURLSessionTask = session.dataTaskWithRequest(request)
  17. // 执行任务
  18. dataTask.resume()


  1. // 接收到服务器响应的时候调用方法
  2. func URLSession(session: NSURLSession,dataTask: NSURLSessionDataTask,didReceiveResponse response: NSURLResponse,completionHandler: (NSURLSessionResponseDisposition) -> Void) {
  3. // 响应头信息,即response
  4. print("didReceiveResponse--%@",response)
  5. // 注意:需要使用completionHandler回调告诉系统应该如何处理服务器返回的数据
  6. // 默认是取消的
  7. /*
  8. NSURLSessionResponseCancel = 0,默认的处理方式,取消
  9. NSURLSessionResponseAllow = 1,接收服务器返回的数据
  10. NSURLSessionResponseBecomeDownload = 2,变成一个下载请求
  11. NSURLSessionResponseBecomeStream 变成一个流
  12. */
  13. completionHandler(NSURLSessionResponseDisposition.Allow)
  14. }


  1. // 接收到服务器返回数据的时候会调用方法,如果数据较大那么该方法可能会调用多次
  2. func URLSession(session: NSURLSession,didReceiveData data: NSData) {
  3. print("didReceiveData--%@",data)
  4. // 拼接服务器返回的数据
  5. if self.data == nil
  6. {
  7. self.data = NSMutableData()
  8. }
  9. self.data.appendData(data)
  10. }


  1. // 当请求完成(成功|失败)的时候会调用方法,如果请求失败,则error有值
  2. func URLSession(session: NSURLSession,task: NSURLSessionTask,didCompleteWithError error: NSError?) {
  3. if (error == nil)
  4. {
  5. //解析数据,JSON解析请参考http://www.cnblogs.com/wendingding/p/3815303.html
  6. var dict:NSDictionary? = nil
  7. do {
  8. dict = try NSJSONSerialization.JSONObjectWithData(self.data,options: NSJSONReadingOptions.init(rawValue: 0)) as? NSDictionary
  9. } catch {
  10. }
  11. print("%@",dict)
  12. }
  13. }

猜你在找的Swift相关文章