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 trialJustin Doo
3,607 PointsHaving problem with part 2 of the call back/ closure Swift weather app challenge, can anyone help?
Been trying to figure this out for the las few days, I'm stumped. Any help will be appreciated.
import Foundation
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)}
// Add code above
dataTask.resume()
}
1 Answer
Rasmus Rønholt
Courses Plus Student 17,358 PointsHey Justin If you didn't already solve this, then here goes :)
The completionHandler of dataTaskWithRequest should return Void, but in your closure you are trying to "return" the completion. In stead you should simply call the handler that is passed to the fetchTreehouseBlogPosts method.
let dataTask = session.dataTaskWithRequest(request) {
(let data, let response, let error) in
// Do stuff here
completion(data, response, error)
}
Now the above is completely valid, but if you are not doing anything with the results, you might as well just point to the completion handler that is passed to the fetchTreehouseBlogPosts method like so:
let dataTask = session.dataTaskWithRequest(request, completionHandler: completion)
Kevin Scully
6,506 PointsKevin Scully
6,506 PointsIn the challenge, it seems the more concise second option doesn't work.
Rasmus Rønholt
Courses Plus Student 17,358 PointsRasmus Rønholt
Courses Plus Student 17,358 PointsNope - seems you're right Kevin... It does work in the real world, though.