回调关闭方法?

时间:2015-08-17 00:49:09

标签: ios swift nsurl

这是我从树屋里得到的一个非常具体的问题 第一部分:我们正在编写一个应用程序,以从Treehouse博客中获取最新的博客文章。这需要使用在后台执行的异步方法发出网络请求。为此我们需要一个闭包。 创建一个名为fetchTreehouseBlogPosts的方法,它有一个参数 - 一个完成处理程序。闭包有三个参数:一个包含请求结果的数据对象,类型为NSData !,我们请求的HTTP响应对象为NSURLResponse!类型,错误对象为NSError!类型,返回类型为void。

/////////////I get this part and the code is correct as following: 

typealias BlogPostCompletion = ((NSData!, NSURLResponse!, NSError!) -> Void)

func fetchTreehouseBlogPosts(completion: BlogPostCompletion){}

///////////This is the part i cant get right. Please help

Copy paste the following code inside the body of the method:

let blogURL = NSURL(string: "http://blog.teamtreehouse.com/api/")
  let requestURL = NSURL(string: "get_recent_summary/?count=20", relativeToURL: blogURL)

  let request = NSURLRequest(URL: requestURL!)

  let config = NSURLSessionConfiguration.defaultSessionConfiguration()
  let session = NSURLSession(configuration: config)

  // Add your code between the comments

  // Add code above

  dataTask.resume()

您的工作是创建一个名为dataTask的数据任务(不是下载任务),其中包含一个返回数据任务结果的完成处理程序。在评论部分之间添加此数据任务。 完成后,在数据任务的主体内,将结果返回给fetchTreehouseBlogPosts方法的完成处理程序。

2 个答案:

答案 0 :(得分:0)

确保您也为该类型命名。 dataTask之后包含NSURLSessionDataTask就像这样......

让dataTask:NSURLSessionDataTask = session.dataTaskWithRequest(request){} ....

&安培;然后继续你的陈述。

答案 1 :(得分:0)

import Foundation

// Add your code below
typealias BlogPostCompletion = ((NSData!, NSURLResponse!, NSError!) -> Void)

func fetchTreehouseBlogPosts(completion: BlogPostCompletion) {

  let blogURL = NSURL(string: "http://blog.teamtreehouse.com/api/")
  let requestURL = NSURL(string: "get_recent_summary/?count=20", relativeToURL: blogURL)

  let request = NSURLRequest(URL: requestURL!)

  let config = NSURLSessionConfiguration.defaultSessionConfiguration()
  let session = NSURLSession(configuration: config)

   let dataTask: NSURLSessionDataTask  = session.dataTaskWithRequest(request) {
   (let data, let response, let error) in
     completion(data, response, error)
   }

   dataTask.resume()
}