记录了如何读取网页数据,如何与服务器交互。
HTTP 数据通信
读取网页的数据
读取网页数据保存为字符串
1 2 3 4 5
   | 
  var str = NSString(contentsOfURL: NSURL(string:"http://www.jikexueyuan.com")!, encoding: NSUTF8StringEncoding, error: nil)
  println(str)
 
  | 
 
读取网页数据保存为二进制数据
1 2 3 4 5 6 7 8 9
   | 
          var data = NSData(contentsOfURL: NSURL(string: "http://www.jiekexueyuan.com")!)                  println(data)                                    println(NSString(data: data!, encoding: NSUTF8StringEncoding))
 
  | 
 
NSURLConnection
上面的两种通信方式只适用于快速读取数据,因为它们工作方式是同步的,读取数据时用户界面会处于卡死状态,上面两种方式一般用于读取本地的资源。
同步加载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
   |  var resp:NSURLResponse?       var error:NSError?                     var data = NSURLConnection.sendSynchronousRequest(NSURLRequest(URL: NSURL(string: "http://www.jikexueyuan.com")!), returningResponse:&resp,error:nil)                     if let d = data{                                               println(NSString(data: d, encoding: NSUTF8StringEncoding))       }                     if let e = error{           println(e)       }
 
  | 
 
异步加载
1 2 3 4 5 6 7 8 9 10 11 12 13 14
   | 
                   NSURLConnection.sendAsynchronousRequest(NSURLRequest(URL: NSURL(string: "http://jikexueyuan.com")!), queue: NSOperationQueue())             {                 (resp:NSURLResponse!, data:NSData!, error:NSError!) -> Void in                              if let e = error{                     println("发生了错误")                 }else{                     println(NSString(data: data, encoding: NSUTF8StringEncoding))                 }                      }
 
  | 
 
与服务器通信
GET 方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
   |  NSURLConnection.sendAsynchronousRequest(NSURLRequest(URL:NSURL(string: "http://www.jikexueyuan/index.heml?name=example")!), queue: NSOperationQueue(), completionHandler: { (resp:NSURLResponse!, data:NSData!, error:NSError!) -> Void in                                                       if let d = data{                                                            如果 queue: 参数传递的是 NSOperationQueue.mainQueue() 主线程,               就可以直接使用下面的写法。但是如果任务是耗时的则会造成界面卡顿,不建议使用这种方式。                              */                                             
                如果 queue: 传递的参数是 NSOperationQueue() 操作线程,那么就不能直接修改主线程的资源,需要调用 dispatch_sync 将修改主线程资源的操作发送到主线程中执行。好处是可以避免耗时的操作造成的界面卡顿。                              */               dispatch_sync(dispatch_get_main_queue(), { () -> Void in                                  })                                         }                  })
 
  | 
 
POST 方式
1 2 3 4 5 6 7 8 9 10 11 12 13
   | 
 
  var req = NSMutableURLRequest(URL: NSURL(string: "http://www.jikexueyuan")!)
  req.HTTPMethod = "POST" req.HTTPBody=NSString(string: "name=\(0)").dataUsingEncoding(NSUTF8StringEncoding)
  NSURLConnection.sendAsynchronousRequest(req, queue: NSOperationQueue()) { (rsp:NSURLResponse!, data:NSData!, error:NSError!) -> Void in     if let d = data{              } }
 
  |