iOS开发——网络编程Swift篇&(七)NSURLSession详解
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详解的更多相关文章
- iOS开发——网络编程Swift篇&Alamofire详解
Alamofire详解 预览图 Swift Alamofire 简介 Alamofire是 Swift 语言的 HTTP 网络开发工具包,相当于Swift实现AFNetworking版本. 当然,AF ...
- iOS开发——网络编程Swift篇&(八)SwiftyJSON详解
SwiftyJSON详解 最近看了一些网络请求的例子,发现Swift在解析JSON数据时特别别扭,总是要写一大堆的downcast(as?)和可选(Optional),看?号都看花了.随后发现了这个库 ...
- iOS开发——网络编程Swift篇&(二)同/异&步请求
同/异&步请求 同步: // MARK: - 同步请求 func httpSynchronousRequest() { //创建NSURL对象 var url:NSURL! = NSURL(s ...
- iOS开发——网络编程Swift篇&(一)网络监测
网络监测 enum ReachabilityType { case WWAN, WiFi, NotConnected } public class Reachability { /** :see: O ...
- iOS开发——网络编程Swift篇&(六)异步Post方式
异步Post方式 // MARK: - 异步Post方式 func asynchronousPost() { //创建NSURL对象 var url:NSURL! = NSURL(string: &q ...
- iOS开发——网络编程Swift篇&(五)同步Post方式
同步Post方式 // MARK: - 同步Post方式 func synchronousPost() { //创建NSURL对象 var url:NSURL! = NSURL(string: &qu ...
- iOS开发——网络编程Swift篇&(四)异步Get方式
异步Get方式 // MARK: - 异步Get方式 func asynchronousGet() { //创建NSURL对象 var url:NSURL! = NSURL(string: " ...
- iOS开发——网络编程Swift篇&(三)同步Get方式
同步Get方式 // MARK: - 同步Get方式 func synchronousGet() { //创建NSURL对象 var url:NSURL! = NSURL(string: " ...
- iOS开发——网络编程OC篇&Socket编程
Socket编程 一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作 ...
随机推荐
- hdu 2459 (后缀数组+RMQ)
题意:让你求一个串中连续重复次数最多的串(不重叠),如果重复的次数一样多的话就输出字典序小的那一串. 分析:有一道比这个简单一些的题spoj 687, 假设一个长度为l的子串重复出现两次,那么它必然会 ...
- [Everyday Mathematics]20150211 Carlson inequality
$$\bex a_n\geq 0\ra \vsm{n}a_n\leq \sqrt{\pi}\sex{\vsm{n}a_n^2}^{1/4} \sex{\vsm{n}n^2a_n^2}^{1/4}, \ ...
- IT版孔乙己(转)
[不要做学究]回忆孔先生IT版 我关于本文评价:看到这篇文章很多人会生出这样的疑问“这明明是在诋毁钻研技术的人嘛?是不是在宣扬技术无用论?”. 初看这篇文章的时候我也是这样的想法,但是逐步才明白这篇文 ...
- 【剑指offer 面试题16】反转链表
思路: 用三个指针preNode.curNode.nextNode完成. #include <iostream> using namespace std; struct ListNode ...
- OpenGL超级宝典第5版&&开发环境搭建
参考:http://www.zyh1690.org/build-opengl-super-bible-fifth-edition-development-environment/ 环境搭建的测试环境为 ...
- linux 配置 Samba 服务器实现文件共享
1. 下载samba yum install samba 2. 启动samba 服务 service smb start 3.配置samba 打开/etc/samba/smb.conf 写入一下内容 ...
- ping命令的几个简单使用
发觉linux下的ping命令花样还挺多的,下面是几个例子 1.ping www.baidu.com,最粗糙的用法,此时主机将不停地向目的地址发送ICMP echo request数据包,直至你按下C ...
- boosting和bagging
首先来说明一下bootstraps:可以把它认为是一种有放回的抽样方法. bagging:boostraps aggregating(汇总) boosting:Adaboot (Adaptive Bo ...
- URAL-1982 Electrification Plan 最小生成树
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1982 题意:无向图,给n个点,n^2条边,每条边有个一权值,其中有k个点有发电站,给出这 ...
- SRM 511 DIV1 500pt(DP)
题目简述 给定n个数,两个人轮流取数,和之前两个人的取的数或起来,谁不能取数或者谁取到的数和之前的数或值为511谁输,问谁能够赢? 题解 刚开始的想法是直接搜,不过需要记录取过的值的状态,2^50显然 ...