NSURLSession 基本用法示例

NSURLSession 基本用法示例

使用NSURLSession来执行网络请求:

  let url = urlWithSearchText(searchBar.text!)
  let session = NSURLSession.sharedSession()
  let dataTask = session.dataTaskWithURL(url, completionHandler: { data, response, error in
    if let error = error {
      print("Failure! \(error)")
    } else {
      print("Success! \(response!)")
    }
  })
  dataTask.resume()

url获取访问服务器的路径

session使用sharedSession足够基本使用

dataTaskurl发送请求,作为参数的closure是请求结束的返回,包含三个参数

最后,dataTask需要调resume方法来开始执行

所有的一切都是在后台异步执行的。


使用Session来异步下载图片

结合Swift的特性extension可以在对UIImage进行扩展,使得异步下载图片。

下面是类UIImageView+DownloadImage.swift的代码实现:

extension UIImageView {
  func loadImageWithURL(url: NSURL) -> NSURLSessionDownloadTask {
    let session = NSURLSession.sharedSession()
    
    let downloadTask = session.downloadTaskWithURL(url) {
      [weak self] url, response, error in
      if error == nil, let url = url, data = NSData(contentsOfURL: url), image = UIImage(data: data) {
        dispatch_sync(dispatch_get_main_queue()) {
          if let strongSelf = self {
            strongSelf.image = image
          }
        }
      }
    }
    downloadTask.resume()
    return downloadTask
  }
}

另外这个if语句的写法比较特殊,这里相当于很多if的嵌套,对三个变量都进行了unwrapped的操作:urlNSData(contentsOfURL: url)UIImage(data: data)

if error == nil, let url = url, data = NSData(contentsOfURL: url), image = UIImage(data: data) {
  //Code
}

还省略了let 的书写,当然也可以写成:

if error == nil, let url = url, let data = NSData(contentsOfURL: url), let image = UIImage(data: data) {
  //Code
}

你可能感兴趣的:(NSURLSession 基本用法示例)