Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

iOS Build a Weather App with Swift Managing Complexity Callback Methods With Closures

Callback methods with closure?

I have been struggling with this challenge for a while now and can't seem to find a way to do it. This is the objective:

We're writing an app to fetch the most recent blog posts from the Treehouse blog. This requires making a network request using asynchronous methods that execute in the background. For that we need a closure. Create a method called fetchTreehouseBlogPosts, that has a single parameter - a completion handler. The closure has three parameters: a data object containing the results of the request as type NSData!, the HTTP response object from our request as type NSURLResponse!, an error object as type NSError!, and a return type of void. Note: If you prefer to use a typealias to make the method signature clear, name it BlogPostCompletion

It is really long and a little confusing. I can't figure out how to do it but I gave it my best shot. Please help solve the challenge. Here is my code:

Callbacks.swift
import Foundation

// Add your code below

func fetchTreehouseBlogPosts(completion: (NSURLResponse! -> Void)) (completionHandler {
let data, let response, let error) in
}

1 Answer

but jut in case:

import Foundation

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

// Add your code below 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)

// Add your code between the comments let dataTask: NSURLSessionDataTask = session.dataTaskWithRequest(request) {(data, response, error) in return completion(data, response, error)

} dataTask.resume() }