NSURLSession详解

     // MARK: - /* 使用NSURLSessionDataTask加载数据 */
     func sessionLoadData()
     {
         //创建NSURL对象
         var url:NSURL! = NSURL(string: "http://m.weather.com.cn/data/101010100.html")

         //创建请求对象
         var request : NSURLRequest = NSURLRequest(URL: url)

         let session = NSURLSession.sharedSession()

         var dataTask = session.dataTaskWithRequest(request, completionHandler: { (var data:NSData?, var response:NSURLResponse?, var error:NSError?) -> Void in

             //返回错误信息情况
             if (error != nil)
             {
                 println(error?.code)
                 println(error?.description)
             }else
             {
                 var jsonString = NSString(data: data!, encoding: NSUTF8StringEncoding)
                 println(jsonString)
             }
         }) as NSURLSessionTask

         //使用resume方法启动任务
         dataTask.resume()
     }

     // MARK: - /* 使用NSURLSessionDataTask下载文件  ---- 简单下载,不需要知道下载进度 */
     func sessionSimpleDownload()
     {
         //下载地址
         var url = NSURL(string: "http://www.iphonetrain.com/shop/data/ios/201404/source/2809080296130100.jpg")
         //请求
         var request = NSURLRequest(URL: url!)
         //连接
         var session = NSURLSession.sharedSession()
         //下载任务
         var downloadTask = session.downloadTaskWithRequest(request, completionHandler: { (var location:NSURL?,var response:NSURLResponse?, var error:NSError?) -> Void in

             // 输出下载文件原来的存放目录
             println("location: \(location)")

             //location位置转换
             var locationPath = location?.path

             //拷贝到我们自己目录中
             let documents:String = NSHomeDirectory() + "/Documents/1.png"

             // 创建文件管理器
             var fileManager :NSFileManager = NSFileManager.defaultManager()
             fileManager.moveItemAtPath(locationPath!, toPath: documents, error: nil)
             println("location: \(documents)")
         })

         //使用resume方法启动任务
         downloadTask.resume()
     }

     // MARK: - /* 使用NSURLSessionDataTask下载文件  ---- 获取进度 */
     //创建一个下载模式--单利实现
     func currentSession()->NSURLSession{

         var predicate:dispatch_once_t =
         var currentSession:NSURLSession? = nil

         dispatch_once(&predicate,{

             var config = NSURLSessionConfiguration.defaultSessionConfiguration()

             currentSession = NSURLSession(configuration: config, delegate: self, delegateQueue: nil)
             }
         )
         return currentSession!
     }

     func sessionSeniorDownload()
     {
         //下载地址
         var url = NSURL(string: "http://www.iphonetrain.com/shop/data/ios/201404/source/2809080296130100.jpg")
         //请求
         var request = NSURLRequest(URL: url!)

         //连接
         var session = currentSession() as NSURLSession

         //下载任务
         var downloadTask = session.downloadTaskWithRequest(request)

         //使用resume方法启动任务
         downloadTask.resume()
     }

      // MARK: - NSURLSessionDownloadDelegate
     func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL)
     {
         //下载结束
         println("下载结束")

     }
     func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64)
     {
         //获取进度
          var written:CGFloat = (CGFloat)(bytesWritten)
          var total:CGFloat = (CGFloat)(totalBytesExpectedToWrite)

         var pro:CGFloat = written / total
         println("下按进度:\(pro)")
     }
     func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didResumeAtOffset fileOffset: Int64, expectedTotalBytes: Int64)
     {
         //下载偏移,主要用于暂停续传
     }

     // MARK: -  /* 使用NSURLSessionDataTask上传文件 */
     func sessionUpload()
     {
         //上传的位置地址
         var url = NSURL(string: "http://www.iphonetrain.com/shop/data/")

         //请求
         var request = NSURLRequest(URL: url!)

         //连接
         var session = NSURLSession.sharedSession()

         //上传数据流
         let documents:String = NSHomeDirectory() + "/Documents/1.png"
         var imgData = NSData(contentsOfFile: documents)

         var uploadTask = session.uploadTaskWithRequest(request, fromData: imgData, completionHandler: { (var data:NSData?, var response:NSURLResponse?, var error:NSError?) -> Void in

             //上传完毕之后判断
             println("上传完毕")
         })

         //使用resume方法启动任务
         uploadTask.resume()
     }
 

iOS开发——网络编程Swift篇&(七)NSURLSession详解的更多相关文章

  1. iOS开发——网络编程Swift篇&Alamofire详解

    Alamofire详解 预览图 Swift Alamofire 简介 Alamofire是 Swift 语言的 HTTP 网络开发工具包,相当于Swift实现AFNetworking版本. 当然,AF ...

  2. iOS开发——网络编程Swift篇&(八)SwiftyJSON详解

    SwiftyJSON详解 最近看了一些网络请求的例子,发现Swift在解析JSON数据时特别别扭,总是要写一大堆的downcast(as?)和可选(Optional),看?号都看花了.随后发现了这个库 ...

  3. iOS开发——网络编程Swift篇&(二)同/异&步请求

    同/异&步请求 同步: // MARK: - 同步请求 func httpSynchronousRequest() { //创建NSURL对象 var url:NSURL! = NSURL(s ...

  4. iOS开发——网络编程Swift篇&(一)网络监测

    网络监测 enum ReachabilityType { case WWAN, WiFi, NotConnected } public class Reachability { /** :see: O ...

  5. iOS开发——网络编程Swift篇&(六)异步Post方式

    异步Post方式 // MARK: - 异步Post方式 func asynchronousPost() { //创建NSURL对象 var url:NSURL! = NSURL(string: &q ...

  6. iOS开发——网络编程Swift篇&(五)同步Post方式

    同步Post方式 // MARK: - 同步Post方式 func synchronousPost() { //创建NSURL对象 var url:NSURL! = NSURL(string: &qu ...

  7. iOS开发——网络编程Swift篇&(四)异步Get方式

    异步Get方式 // MARK: - 异步Get方式 func asynchronousGet() { //创建NSURL对象 var url:NSURL! = NSURL(string: " ...

  8. iOS开发——网络编程Swift篇&(三)同步Get方式

    同步Get方式 // MARK: - 同步Get方式 func synchronousGet() { //创建NSURL对象 var url:NSURL! = NSURL(string: " ...

  9. iOS开发——网络编程OC篇&Socket编程

    Socket编程 一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作 ...

随机推荐

  1. 【暑假】[基本数据结构]根据BFS与DFS确定树

    UVa10410 Tree Reconstruction 算法:根据BFS构造pos数组以区分关系,在此基础上对DFS序列操作.注:栈中存父结点,栈顶是最优先的父结点. 代码如下: #include& ...

  2. Python学习笔记——正则表达式

    今天把之前学的正则表达式好好总结总结. 一.元字符 . :  .表示可以匹配任意一个字符 \d  :  \d表示可以匹配任意一个数字 \D  : \D表示可以匹配任意一个非数字 \s  :  \s表示 ...

  3. 内核源码分析之进程地址空间(基于3.16-rc4)

    所谓进程的地址空间,指的就是进程的虚拟地址空间.当创建一个进程时,内核会为该进程分配一个线性的地址空间(虚拟地址空间),有了虚拟地址空间后,内核就可以通过页表将进程的物理地址地址空间映射到其虚拟地址空 ...

  4. CDH5.5.1版HBase安装使用LZO压缩

    1.安装      RHEL/CentOS/Oracle 5 Navigate to this link and save the file in the /etc/yum.repos.d/ dire ...

  5. Oracle Database 12c 新特性 - Pluggable Database

    在Oracle Database 12c中,可组装式数据库 - Pluggable Database为云计算而生.在12c以前,Oracle数据库是通过Schema来进行用户模式隔离的,现在,可组装式 ...

  6. 《Java数据结构与算法》笔记-CH4-1栈的实现

    class StackX{ private int maxSize; private long[] stackArray; private int top; public StackX(int siz ...

  7. 第二百四十八天 how can I 坚持

    无忧无虑好烦恼. 一天天的过得好可怕,太快了. 睡觉,好累. 把我的小叶元宝用棍支起来了,省得他长弯了. 还有把六神给倒了,弄了个小喷壶. 睡觉.

  8. POJ 1751 Highways (最小生成树)

    Highways 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/G Description The island nation ...

  9. mongoDB在windows下基于配置文件的安装和权限配置方式

    下载mongoDB  http://www.mongodb.org/downloads 根据操作系统,选择需要下载的安装包 添加mongodb 安装目录 将解压的文件夹中内容拷贝,存放在想要安装的文件 ...

  10. 转载JQuery 中empty, remove 和 detach的区别

    转载 http://www.cnblogs.com/lisongy/p/4109420.html .empty()  描述: 从DOM中移除集合中匹配元素的所有子节点. 这个方法不接受任何参数. 这个 ...