iOS开发——网络编程Swift篇&(七)NSURLSession详解

NSURLSession详解

  1     // MARK: - /* 使用NSURLSessionDataTask加载数据 */
  2     func sessionLoadData()
  3     {
  4         //创建NSURL对象
  5         var url:NSURL! = NSURL(string: "http://m.weather.com.cn/data/101010100.html")
  6
  7         //创建请求对象
  8         var request : NSURLRequest = NSURLRequest(URL: url)
  9
 10         let session = NSURLSession.sharedSession()
 11
 12
 13         var dataTask = session.dataTaskWithRequest(request, completionHandler: { (var data:NSData?, var response:NSURLResponse?, var error:NSError?) -> Void in
 14
 15             //返回错误信息情况
 16             if (error != nil)
 17             {
 18                 println(error?.code)
 19                 println(error?.description)
 20             }else
 21             {
 22                 var jsonString = NSString(data: data!, encoding: NSUTF8StringEncoding)
 23                 println(jsonString)
 24             }
 25         }) as NSURLSessionTask
 26
 27         //使用resume方法启动任务
 28         dataTask.resume()
 29     }
 30
 31
 32
 33     // MARK: - /* 使用NSURLSessionDataTask下载文件  ---- 简单下载,不需要知道下载进度 */
 34     func sessionSimpleDownload()
 35     {
 36         //下载地址
 37         var url = NSURL(string: "http://www.iphonetrain.com/shop/data/ios/201404/source/2809080296130100.jpg")
 38         //请求
 39         var request = NSURLRequest(URL: url!)
 40         //连接
 41         var session = NSURLSession.sharedSession()
 42         //下载任务
 43         var downloadTask = session.downloadTaskWithRequest(request, completionHandler: { (var location:NSURL?,var response:NSURLResponse?, var error:NSError?) -> Void in
 44
 45             // 输出下载文件原来的存放目录
 46             println("location: \(location)")
 47
 48             //location位置转换
 49             var locationPath = location?.path
 50
 51             //拷贝到我们自己目录中
 52             let documents:String = NSHomeDirectory() + "/Documents/1.png"
 53
 54             // 创建文件管理器
 55             var fileManager :NSFileManager = NSFileManager.defaultManager()
 56             fileManager.moveItemAtPath(locationPath!, toPath: documents, error: nil)
 57             println("location: \(documents)")
 58         })
 59
 60         //使用resume方法启动任务
 61         downloadTask.resume()
 62     }
 63
 64
 65     // MARK: - /* 使用NSURLSessionDataTask下载文件  ---- 获取进度 */
 66     //创建一个下载模式--单利实现
 67     func currentSession()->NSURLSession{
 68
 69         var predicate:dispatch_once_t = 0
 70         var currentSession:NSURLSession? = nil
 71
 72         dispatch_once(&predicate,{
 73
 74             var config = NSURLSessionConfiguration.defaultSessionConfiguration()
 75
 76             currentSession = NSURLSession(configuration: config, delegate: self, delegateQueue: nil)
 77             }
 78         )
 79         return currentSession!
 80     }
 81
 82     func sessionSeniorDownload()
 83     {
 84         //下载地址
 85         var url = NSURL(string: "http://www.iphonetrain.com/shop/data/ios/201404/source/2809080296130100.jpg")
 86         //请求
 87         var request = NSURLRequest(URL: url!)
 88
 89         //连接
 90         var session = currentSession() as NSURLSession
 91
 92         //下载任务
 93         var downloadTask = session.downloadTaskWithRequest(request)
 94
 95         //使用resume方法启动任务
 96         downloadTask.resume()
 97     }
 98
 99
100      // MARK: - NSURLSessionDownloadDelegate
101     func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL)
102     {
103         //下载结束
104         println("下载结束")
105
106     }
107     func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64)
108     {
109         //获取进度
110          var written:CGFloat = (CGFloat)(bytesWritten)
111          var total:CGFloat = (CGFloat)(totalBytesExpectedToWrite)
112
113         var pro:CGFloat = written / total
114         println("下按进度:\(pro)")
115     }
116     func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didResumeAtOffset fileOffset: Int64, expectedTotalBytes: Int64)
117     {
118         //下载偏移,主要用于暂停续传
119     }
120
121
122
123
124     // MARK: -  /* 使用NSURLSessionDataTask上传文件 */
125     func sessionUpload()
126     {
127         //上传的位置地址
128         var url = NSURL(string: "http://www.iphonetrain.com/shop/data/")
129
130         //请求
131         var request = NSURLRequest(URL: url!)
132
133         //连接
134         var session = NSURLSession.sharedSession()
135
136         //上传数据流
137         let documents:String = NSHomeDirectory() + "/Documents/1.png"
138         var imgData = NSData(contentsOfFile: documents)
139
140         var uploadTask = session.uploadTaskWithRequest(request, fromData: imgData, completionHandler: { (var data:NSData?, var response:NSURLResponse?, var error:NSError?) -> Void in
141
142             //上传完毕之后判断
143             println("上传完毕")
144         })
145
146         //使用resume方法启动任务
147         uploadTask.resume()
148     }
时间: 2024-08-04 21:26:56

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

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

Alamofire详解 预览图 Swift Alamofire 简介 Alamofire是 Swift 语言的 HTTP 网络开发工具包,相当于Swift实现AFNetworking版本. 当然,AFNetworking非常稳定,在Mac OSX与iOS中也能像其他Objective-C代码一样用Swift编写.不过Alamofire更适合Swift语言风格习惯(Alamofire与AFNetworking可以共存一个项目中,互不影响). Alamofire 取名来源于Alamo Fire fl

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

SwiftyJSON详解 最近看了一些网络请求的例子,发现Swift在解析JSON数据时特别别扭,总是要写一大堆的downcast(as?)和可选(Optional),看?号都看花了.随后发现了这个库SwiftyJSON,问题迎刃而解,灰常优雅和Swifty! 简单介绍下这个库(内容译自SwiftyJSON的README): 为什么典型的在Swift中处理JSON的方法不好? Swift语言是一种严格的类型安全语言,它要求我们显示的设置类型,并帮助我们写出更少bug的代码.但是当处理JSON这种

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

同/异&步请求 同步: 1 // MARK: - 同步请求 2 func httpSynchronousRequest() 3 { 4 //创建NSURL对象 5 var url:NSURL! = NSURL(string: "http://m.weather.com.cn/data/101010100.html") 6 7 //创建请求对象 8 var urlRequest : NSURLRequest = NSURLRequest(URL: url) 9 10 //响应对象

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

网络监测 1 enum ReachabilityType { 2 case WWAN, 3 WiFi, 4 NotConnected 5 } 6 7 public class Reachability { 8 9 /** 10 :see: Original post - http://www.chrisdanielson.com/2009/07/22/iphone-network-connectivity-test-example/ 11 */ 12 class func isConnected

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

异步Get方式 1 // MARK: - 异步Get方式 2 func asynchronousGet() 3 { 4 //创建NSURL对象 5 var url:NSURL! = NSURL(string: "http://m.weather.com.cn/data/101010100.html") 6 7 //创建请求对象 8 var urlRequest : NSURLRequest = NSURLRequest(URL: url, cachePolicy: NSURLReque

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

同步Post方式 1 // MARK: - 同步Post方式 2 func synchronousPost() 3 { 4 //创建NSURL对象 5 var url:NSURL! = NSURL(string: "http://m.weather.com.cn/data/101010100.html") 6 7 //创建请求对象 8 var request : NSMutableURLRequest = NSMutableURLRequest(URL: url, cachePolic

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

异步Post方式 1 // MARK: - 异步Post方式 2 func asynchronousPost() 3 { 4 //创建NSURL对象 5 var url:NSURL! = NSURL(string: "http://m.weather.com.cn/data/101010100.html") 6 7 //创建请求对象 8 var request : NSMutableURLRequest = NSMutableURLRequest(URL: url, cachePoli

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

同步Get方式 1 // MARK: - 同步Get方式 2 func synchronousGet() 3 { 4 //创建NSURL对象 5 var url:NSURL! = NSURL(string: "http://m.weather.com.cn/data/101010100.html") 6 7 //创建请求对象 8 var urlRequest : NSURLRequest = NSURLRequest(URL: url, cachePolicy: NSURLReques

iOS开发——网络编程OC篇&(十二)AFN详解

AFN详解 众所周知,苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐.操作起来很不方便.不仅要做区分各种请求设置各种不同的参数,而且还要经常在多线程里操作,同时还要对请求与返回的数据做各种序列化的操作,同时还要考虑请求数据的安全等一堆问题. 一.早前的几个网络框架 1.ASI框架: HTTP终结者.很牛, 但是有BUG, 已经停止更新. 2.MKNetworkKit (印度人写的). 3.AFN一直还在更新. AFNetworking的出现:MAC/iOS设计的一套网络